我正在尝试获取每个分类变量(在数据框中)的数值变量的总和。我尝试过使用 tapply
,但它不需要整个 data.frame
。
这是一个工作示例,其中包含一些数据,如下所示:
> set.seed(667)
> df <- data.frame(a = sample(c("Group A","Group B","Group C",NA), 10, rep = TRUE),
b = sample(c(1, 2, 3, 4, 5, 6), 10, rep=TRUE),
c = sample(c(11, 12, 13, 14, 15, 16), 10, rep=TRUE))
> df
a b c
1 Group A 4 12
2 Group B 6 12
3 <NA> 4 14
4 Group C 1 16
5 <NA> 2 14
6 <NA> 3 13
7 Group C 4 13
8 <NA> 6 15
9 Group B 3 16
10 Group B 5 16
使用tapply
,我可以一次获取一个向量:
> tapply(df$b,df$a,sum)
Group A Group B Group C
4 14 5
但我更感兴趣的是得到这样的东西:
a b c
1 Group A 4 12
2 Group B 14 44
3 Group C 5 29
如有任何帮助,我们将不胜感激。谢谢。
最佳答案
使用聚合代替:
aggregate(df[ , c("b","c")], df['a'], FUN=sum)
a b c
1 Group A 4 12
2 Group B 14 44
3 Group C 5 29
我不确定为什么,但您需要将第二个参数传递给聚合作为列表,因此使用 df$a 会出错。然后,它在第一个参数中的各个列上使用该函数。
关于r - data.frame 中按组求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114666/