2

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

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

4

1 回答 1

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

于 2013-04-19T23:11:13.120 回答