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

如何在R语言中按activity列动态汇总所有数据列(无需指定列名)

动态DataFrame按指定列分组求和(无需手动指定列名)

我有如下DataFrame,希望按activity列对所有其他列进行求和。当前的实现需要手动指定每一列的列名,但由于数据集是动态的,每次列名都会变化,因此需要一种无需指定列名(仅保留activity列作为分组依据)的求和方法。

示例数据:

vol <- structure(list(activity = c("RAAMELK", "Separering", "Sweetmilk Pasteurizer 8332", 
"9005 - T51 kartong 70x70", "RAAMELK", "Separering", "Sweetmilk Pasteurizer 8331", 
"9004 - T42 kartong 70x70", "9006 - T61 BIB", "9004 - T41 kartong 70x70"
), qty.in = c(0, 19976.92, 17590.92, 17480, 0, 31, 31, 6, 3, 
28), qty_scrap.in = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), qty.out = c(19976.92, 
2386, 17481, 17694, 31, 9, 31, 6, 3, 28), qty_scrap.out = c(0, 
0, 109.92, -214, 0, 0, -270.64, 524, 260, 0)), class = "data.frame", row.names = c(1L, 
3L, 5L, 7L, 9L, 11L, 13L, 15L, 17L, 19L))

原手动指定列名的实现:

library(dplyr)
vol <- vol %>% group_by(activity) %>%
      summarize(qty.in = sum(qty.in),
                qty_scrap.in = sum(qty_scrap.in),
                qty.out = sum(qty.out),
                qty_scrap.out=sum(qty_scrap.out))

解决方案

使用dplyr的across()函数,自动匹配除activity外的所有列执行求和,无需手动列名:

library(dplyr)
vol <- vol %>% 
  group_by(activity) %>%
  summarize(across(-activity, sum), .groups = "drop")
  • across(-activity, sum):对除activity之外的每一列统一执行求和操作
  • .groups = "drop":可选参数,用于分组后取消分组状态,返回普通DataFrame(若需保留分组可省略)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:55:27