我有这个数据框:
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
在此数据框中,有area
和point
的唯一组合,它们是地方。在这些地方,有sp
和rd
定义的动物。我的目标是获取向量列表,其中每个向量是每个位置abund
sp
的总和。在这种情况下,我的列表的第一个向量应该是(13,13),因为在1
a
就有三只狗abund
5 + 5 + 3和两只猫{{1} 8 + 5。
我对解决方案的想法是将我的数据帧划分为组(地点),并在这些子数据帧中进行聚合。但问题是,当我abund
这个数据帧变成较小的数据帧时,那些数据帧将会松散split
(每个数据帧只有其组合的名称,例如1a)所以我无法应用names
功能
答案 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)
})
似乎是你需要的。