如何在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
相关产品推荐
相关产品推荐

