r - data.frame 中按组求和

标签 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

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

使用聚合代替:

 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/

相关文章:

pandas - 如何从数据框和列中的列表中弹出行

r - 如何使用ggplot绘制每行标准偏差的线

r - 在 R4.0.0 中合并数据帧比 R3.6.3 慢 60 倍?

r - 选择所有值为正的组

mysql - 如何在一个查询中组合多个 SUM?

mysql - 使用数组显示行的多个产品的总和

mysql - 从未规范化的表中按 ID 从列中获取 SUM?

python - 基于另一列从 pandas 数据框中的列中的每个列表中删除元素

r - 使用将连续变量分成两组的值构建表

r - 有没有办法限制 ggplot2 中的 vline 长度