如何为DataFrame添加按分组求和的sum_by列
在R中为DataFrame添加分组求和列
sum_by 你需要给现有DataFrame新增sum_by列,该列的值对应每行所在group分组的points列总和,以下是两种常用实现方法:
原始数据
name <- c("Emma", "Joe", "Jack", "Eva", "Ann") group <- c("a", "a", "b", "a", "c") points <- c(5, 4, 6, 8, 9) df <- data.frame(name, group, points)
方法一:使用Base R的ave()函数
ave()可以直接按分组计算并返回与原数据长度匹配的结果,无需额外合并操作:
df$sum_by <- ave(df$points, df$group, FUN = sum)
方法二:使用dplyr包(tidyverse生态)
如果习惯使用tidy风格的代码,可以用dplyr的分组+突变操作:
library(dplyr) df <- df %>% group_by(group) %>% mutate(sum_by = sum(points)) %>% ungroup() # 取消分组,避免后续操作受分组影响
最终结果
执行上述任意一种方法后,df将变为你期望的结构:
> df name group points sum_by 1 Emma a 5 19 2 Joe a 4 19 3 Jack b 6 6 4 Eva a 8 19 5 Ann c 9 9
内容的提问来源于stack exchange,提问作者joejoe9
相关产品推荐
相关产品推荐

