R语言中如何对数据框按两个分类列分组实现行求和?
R语言数据框求和相关操作说明
如果是做单行跨列的行级求和,直接用基础R内置的rowSums()函数即可。
如果是你提到的「按分类列分组后对组内数值列汇总求和」场景,可以通过以下几种主流方式实现,完全匹配你的处理规则与预期输出:
你的处理规则可以拆为两步:
- 提取
team列值的首字母,作为新的分组维度 - 按
country、处理后的team两个维度分组,对x1990、x2005列分别求和
方法1:dplyr实现(可读性最高,日常分析最常用)
library(dplyr) df_sum <- df %>% mutate(team = substr(team, 1, 1)) %>% # 提取team首字母 group_by(country, team) %>% # 双列分组 summarise(x1990 = sum(x1990), x2005 = sum(x2005), .groups = "drop") # 计算完成后取消分组状态
方法2:基础R实现(无需安装第三方包)
# 先处理team列 df$team <- substr(df$team, 1, 1) # 分组聚合 df_sum <- aggregate(cbind(x1990, x2005) ~ country + team, data = df, FUN = sum)
方法3:data.table实现(大数据量场景性能最优)
library(data.table) setDT(df) # 直接在分组参数里处理team列,一步完成计算 df_sum <- df[, .(x1990 = sum(x1990), x2005 = sum(x2005)), by = .(country, team = substr(team, 1, 1))]
以上三种方法运行后得到的结果,和你给出的期望汇总表完全一致。
注:示例中用
substr(字符串, 1, 1)提取首字母,完全适配team列「字母+数字」的格式,如果后续有更复杂的字符串提取规则,替换对应字符串处理函数即可。
内容的提问来源于stack exchange,提问作者Arwen
相关产品推荐
相关产品推荐

