如何从R数据框提取列前缀并按前缀分组求和?
实现方法
这里提供两种常用的R语言解决方案,分别基于基础包(base R)和tidyverse工具集:
方法一:使用基础R实现
通过字符串处理提取分组前缀,再按分组对列进行行求和:
# 从列名中提取分组前缀(移除_value及后续内容) group_keys <- sub("_value.*", "", colnames(df)) # 按前缀分组拆分列,并对每组列按行求和 result_base <- as.data.frame(lapply(split.default(df, group_keys), rowSums)) # 查看结果 result_base
运行后输出结果:
packs_10 packs_18 packs_20 1 200 400 600 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0
方法二:使用tidyverse工具集实现
通过宽表转长表的方式处理分组,更适配复杂数据场景:
首先加载所需工具包:
library(dplyr) library(tidyr)
执行以下代码完成分组求和:
result_tidy <- df %>% # 添加行号保留原始行结构 mutate(row_id = row_number()) %>% # 转长格式拆分列名与对应值 pivot_longer(-row_id, names_to = "col_name", values_to = "value") %>% # 提取分组前缀 mutate(group = sub("_value.*", "", col_name)) %>% # 按行号和分组维度求和 group_by(row_id, group) %>% summarise(total = sum(value), .groups = "drop") %>% # 转回宽格式恢复数据结构 pivot_wider(names_from = group, values_from = total) %>% # 移除临时行号列 select(-row_id) # 查看结果 result_tidy
此方法输出结果与基础R方法完全一致。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

