我正在尝试编写一个使用汇总列创建新数据框的函数。我可以单独使用聚合:
df = aggregate(. ~ Family, data=df, FUN=sum)
但我想用列表中的对象替换'Family':
levels = c('Family','Order','Class','Phylum','Superkingdom')
for (i in 1:5){
OTU = levels[i]
df = lineage[,c(OTU,'Abundance')]
df = aggregate(. ~ OTU, data=df, FUN=sum)
}
在上面的代码中,数据框中的“沿袭”具有选择生物的分类水平,加上丰度值。我想做的是为每个分类水平创建一个新的,总结的数据框架,并总结丰度值。
我在这里发现了很多关于聚合的帖子,但仍然无法让它发挥作用。
提前感谢您的帮助!
答案 0 :(得分:0)
如果您有兴趣将其扩展到简单Abundance
以外,我会将两个变量包括在内进行总结。这样的事情可以奏效:
set.seed(42)
taxa <- c('Family','Order','Class','Phylum','Superkingdom')
df <- data.frame(ID = 1:15, Abundance = runif(15), HomeRange = abs(rnorm(15)), taxa = rep(taxa, times = 3))
(output2 <- aggregate(cbind(HomeRange, Abundance) ~ taxa, data = df, FUN = sum))
结果如下:
# taxa HomeRange Abundance
# 1 Class 1.413938 1.355478
# 2 Family 2.556280 1.891644
# 3 Order 3.317171 2.392776
# 4 Phylum 2.129622 1.742869
# 5 Superkingdom 4.031149 1.809103
同样,对于一个变量:
(output1 <- aggregate(Abundance ~ taxa, data = df, FUN = sum))
# taxa Abundance
# 1 Class 1.355478
# 2 Family 1.891644
# 3 Order 2.392776
# 4 Phylum 1.742869
# 5 Superkingdom 1.809103