由其他组

时间:2015-10-16 09:54:38

标签: r split aggregate

我有这个数据框:

  sp    rd  pH abund area point
 dog  uniq 4.5     5    1     a
 dog  uniq 4.2     5    1     a
 dog   for 6.1     3    1     a
 cat  uniq 7.0     8    1     a
 cat  uniq 4.9     5    1     a
 cat mains 3.1     9    1     b
 cat mains 6.5     1    1     b
 cat mains 6.5     3    1     b
 dog   for  NA     2    2     a
bird   mac 5.0     3    2     a
bird   mac 4.1     5    2     a
bird   mac 5.1    NA    2     a
rabb   lol 5.0     8    2     b
rabb   lol 4.2     5    2     b
rabb   lol 6.0     2    2     b
rabb   lol 2.8     3    2     b

在此数据框中,有areapoint的唯一组合,它们是地方。在这些地方,有sprd定义的动物。我的目标是获取向量列表,其中每个向量是每个位置abund sp的总和。在这种情况下,我的列表的第一个向量应该是(13,13),因为在1 a就有三只狗abund 5 + 5 + 3和两只猫{{1} 8 + 5。

我对解决方案的想法是将我的数据帧划分为组(地点),并在这些子数据帧中进行聚合。但问题是,当我abund这个数据帧变成较小的数据帧时,那些数据帧将会松散split(每个数据帧只有其组合的名称,例如1a)所以我无法应用names功能

1 个答案:

答案 0 :(得分:2)

既然你说你想要一个矢量列表作为结果而不是data.frame,我认为以下是你想要的:

首先,像在初始方法中一样使用ghc -fno-code Test.hs将data.frame拆分成组:

split

然后根据以下内容使用splits <- split(df, list(df$area, df$point)) > splits $`1.a` sp rd pH abund area point 1 dog uniq 4.5 5 1 a 2 dog uniq 4.2 5 1 a 3 dog for 6.1 3 1 a 4 cat uniq 7.0 8 1 a 5 cat uniq 4.9 5 1 a $`2.a` sp rd pH abund area point 9 dog for NA 2 2 a 10 bird mac 5.0 3 2 a 11 bird mac 4.1 5 2 a 12 bird mac 5.1 NA 2 a #and so on... 汇总:

aggregate

输出:

#using lapply the aggregate function is applied
#on each of the previous splits
agg_splits <-
lapply(splits, function(x) {
  aggregate(abund ~ sp + area + point, data = x, FUN=sum)
})

似乎是你需要的。