我有一个如下数据框:
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/