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

如何使用dplyr自动对多列进行分组求和并合并到同一数据集?

当然有更高效的自动化方法!不用手动给每一列重复写分组求和的代码,用dplyr的几个函数就能一次性搞定所有列的求和,还能直接把结果合并到同一个数据集中,省超多时间~

方法一:使用across()(dplyr 1.0.0+ 推荐用法)

这是dplyr新版本主推的函数,灵活性很强。你可以直接指定要计算的列范围(比如前四列),然后在across()里应用sum()函数,还能自定义结果列的命名:

library(dplyr)

# 对iris数据集的前4列,按Species分组求和
abc_all <- iris %>%
  group_by(Species) %>%
  summarise(
    across(1:4, sum, .names = "sum_{.col}")  # .names参数用来给新列命名,{.col}会替换成原列名
  ) %>%
  ungroup()

# 查看结果
print(abc_all)

如果不想用列的位置索引,也可以直接指定列名向量,比如:

across(c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"), sum, .names = "sum_{.col}")
方法二:使用summarise_at()(兼容旧版dplyr)

如果你的dplyr版本低于1.0.0,用summarise_at()也能实现同样的效果:

abc_all <- iris %>%
  group_by(Species) %>%
  summarise_at(vars(1:4), sum) %>%  # vars(1:4)指定要操作的列,同样可以换成具体列名
  ungroup()

要是想给结果列加自定义后缀,比如_sum,可以用funs()(不过这个写法在新版dplyr里已经被across()替代了):

abc_all <- iris %>%
  group_by(Species) %>%
  summarise_at(vars(1:4), funs(sum = sum)) %>%
  ungroup()

用上面任意一种方法,最终都会得到一个包含Species列和所有目标列求和结果的数据框,不用再单独生成多个数据集然后手动合并啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:42:26