我试图获得每个分类变量(在数据框中)的数值变量的总和。我已尝试使用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
任何帮助将不胜感激。感谢。
答案 0 :(得分:4)
改为使用聚合:
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会出错。然后它使用第一个参数中各个列的函数。