R语言无需硬编码列名如何对所有列的重复行分组求和
实现方法汇总
以下三种方案均不需要硬编码列名,也不需要手动循环合并,适配任意数量的列的分组求和需求:
- 方案1:Base R原生
aggregate实现(无需额外安装包)
直接使用公式语法中的.指代除分组列之外的所有列,完全贴合你原来的代码使用习惯:
# 一行完成所有列按name分组求和 aggregate(. ~ name, data = dat, sum)
对应你的示例输出结果如下:
name etc4 etc1 etc2 1 A 30 19 11 2 B 2 7 5 3 C 90 12 1
- 方案2:dplyr实现,语法可读性强
如果你常用tidyverse生态,用across()匹配规则即可动态适配任意数量的非分组列:
library(dplyr) dat %>% group_by(name) %>% # 如果存在不需要求和的非数值列,可以改成across(where(is.numeric), sum) summarise(across(everything(), sum))
- 方案3:data.table实现,适配超大数据/多列场景
如果你的表格列数极多、数据量很大,data.table的运算效率远高于前两种方案:
library(data.table) setDT(dat) # .SD指代分组后的所有非分组列,批量求和 dat_res <- dat[, lapply(.SD, sum), by = name]
内容的提问来源于stack exchange,提问作者Ahdee
相关产品推荐
相关产品推荐

