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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:01:07