我有一个如下数据框:

a   b1  b2  b3  b4  b5  b6  b7  b8  b9
D   4   6   9   5   3   9   7   9   8
F   7   3   8   1   3   1   4   4   3
R   2   5   5   1   4   2   3   1   6
D   9   2   1   4   3   3   8   2   5
D   5   4   3   1   6   4   1   8   3
R   3   7   9   1   8   5   3   4   2
D   4   1   8   2   6   3   2   7   5
F   7   1   7   2   7   1   6   2   4
D   6   3   9   3   9   9   7   1   2

函数tapply(df[,2], INDEX = df$a, sum)可以很好地生成一个表,该表将df [,2]中的所有内容与df $ a相加,但是当我尝试tapply(df[,2:10], INDEX = df$a, sum)以获得相似的表时,除了每列的总和(2、3、4 .. 。,10),我看到一条错误消息:



另外,我希望表的行名是df[,2:10]的列名,这样第1行是b1,第2行是b2,第9行是b9。

最佳答案

这是因为tapply可以处理 vector ,并将df [,2:10]转换为 vector 。紧接着,sum将提供总计,而不是每列的总计。使用aggregate(),例如:

aggregate(df[,2:10],by=list(df$a), sum)

如果要返回列表,可以使用by()。确保指定colSums而不是sum,例如通过在拆分数据帧上进行操作:
by(df[,2:10],df$a,FUN=colSums)

关于r - 如何使用R在数据帧的多列上运行tapply()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7029800/

10-12 17:52
查看更多