在data.frame中按组加总

时间:2013-04-19 22:59:18

标签: r sum dataframe tapply

我试图获得每个分类变量(在数据框中)的数值变量的总和。我已尝试使用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

任何帮助将不胜感激。感谢。

1 个答案:

答案 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会出错。然后它使用第一个参数中各个列的函数。