我有一个包含31列的数据框(sp.table),顶部有物种名称,包含来自不同样本的物种的丰度数据。我还有一个Cruise列,其中包含Cruise的Cruise ID,其中记录了样本。我想用Cruise聚合每一列,所以我有相同数量的列,但行数较少。
我试过了:
a <- aggregate(sp.table[,1:31]~ sp.table$Cruise), FUN = sum)
但它没有用。
答案 0 :(得分:2)
如果只有32列,则以下代码应该可以使用
res1 <- aggregate(.~Cruise, sp.table, FUN=sum)
否则
res2 <- aggregate(sp.table[1:31], list(Cruise=sp.table$Cruise),
FUN = sum)
如果有NAs
res3 <- aggregate(.~Cruise, sp.table,
FUN=sum, na.rm=TRUE, na.action=na.pass)
如果只有列的子集需要sum
resSub <- aggregate(cbind(X1,X2)~Cruise,sp.table, FUN = sum)
set.seed(24)
sp.table <- data.frame(matrix(sample(1:20, 31*10, replace=TRUE),
ncol=31), Cruise=LETTERS[1:2], stringsAsFactors=FALSE)