首页 > 解决方案 > 根据单独的链接数据框中的变量对数据框行进行分组

问题描述

假设我有两个数据框,一个包含环境数据 ( env.df) 和另一个物种出现 ( species.df),两者都具有相同的行名。我想species.df根据 中的列(年份)的值对中的行进行分组env.df,然后分别计算每年的统计数据。

env.df:

              Site  Year
A2015           A    2015
A2016           A    2016
A2017           A    2017
B2015           B    2015
B2016           B    2016
B2017           B    2017

species.df:

               Species1  Species 2 Species 3
A2015             1          1          1
A2016             0          0          1
A2017             0          0          1
B2015             1          0          1
B2016             1          1          1
B2017             1          1          0

我不想再添加任何列,species.df因为我需要使用的统计函数只能处理存在-不存在的按物种样本数据集。我知道如何分别从每年中选择样本species.df[env.df$Year== '2015',]——等等——但我可以使用每年重复的一行代码来完成。我只能让dplyrgroup_by 函数工作,env.df不知道如何将其扩展到链接的 species.df

非常感谢

标签: rdataframegrouping

解决方案


你想要这样的东西吗?

lapply(
  with(env.df, split(row.names(env.df), Year)),
  function(k) species.df[k, ]
)

$`2015`
      Species1 Species2 Species3
A2015        1        1        1
B2015        1        0        1

$`2016`
      Species1 Species2 Species3
A2016        0        0        1
B2016        1        1        1

$`2017`
      Species1 Species2 Species3
A2017        0        0        1
B2017        1        1        0

或者

split(
  cbind(
    env.df,
    species.df[match(row.names(species.df), row.names(env.df)), ]
  ),
  env.df$Year
)

这使

$`2015`
      Site Year Species1 Species2 Species3
A2015    A 2015        1        1        1
B2015    B 2015        1        0        1

$`2016`
      Site Year Species1 Species2 Species3
A2016    A 2016        0        0        1
B2016    B 2016        1        1        1

$`2017`
      Site Year Species1 Species2 Species3
A2017    A 2017        0        0        1
B2017    B 2017        1        1        0

推荐阅读