You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现分组后多列批量求和的自动化流水线?

按分组对多列批量求和的自动化方案

问题背景

之前处理含52个样本列的数据集时,手动编写了如下分组求和代码:

group_by(MTTAXA$MTmatch) %>%
summarise(comb_S026401.R1 = sum(S026401.R1), comb_S026404.R1 = sum(S026404.R1), 
comb_S026406.R1 = sum(S026406.R1),comb_S026409.R1 = sum(S026409.R1),
comb_S026412.R1 = sum(S026412.R1), comb_S026413.R1 = sum(S026413.R1), 

但面对大规模数据集时,手动编写每一列的求和逻辑效率极低,需要简洁的自动化实现方式。


自动化解决方案

方法1:使用across()批量处理指定列(推荐,dplyr 1.0.0+)

这是tidyverse生态下最灵活的批量处理方式,支持按规则筛选列并自定义输出列名:

# 对所有非分组列求和,自动给新列添加"comb_"前缀
MTTAXA %>%
  group_by(MTmatch) %>%
  summarise(across(everything(), sum, .names = "comb_{.col}"))

# 仅对特定前缀的列求和(比如以"S"开头的样本列)
MTTAXA %>%
  group_by(MTmatch) %>%
  summarise(across(starts_with("S"), sum, .names = "comb_{.col}"))
  • everything():选中所有未被分组的列
  • starts_with("S"):按列名前缀筛选,还可搭配ends_with()/contains()等规则精准匹配目标列
  • .names = "comb_{.col}":自定义新列命名规则,{.col}会自动替换为原列名

方法2:使用summarise_all()(兼容旧版dplyr)

如果你的dplyr版本低于1.0.0,可使用旧版批量求和函数:

MTTAXA %>%
  group_by(MTmatch) %>%
  summarise_all(sum)

# 如需添加前缀,可后续用rename_with()批量重命名
MTTAXA %>%
  group_by(MTmatch) %>%
  summarise_all(sum) %>%
  rename_with(~paste0("comb_", .x), -MTmatch)

方法3:基础R实现(无需tidyverse)

用aggregate()函数也能快速实现分组求和:

# 对所有数值列按MTmatch分组求和
aggregate(. ~ MTmatch, data = MTTAXA, sum)

内容的提问来源于stack exchange,提问作者salix7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:46:07