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

求助:在R中合并名称相似的列并计算列值总和

解决R中相似名称列的合并求和问题

输入数据示例

先构造可复现的输入数据:

df <- data.frame(
  sample = 1:5,
  Unidentified…1 = c(5,7,8,9,0),
  Unidentified…2 = c(3,2,4,6,7),
  Pathogen..1 = c(6,1,2,4,5),
  Pathogen…2 = c(8,0,9,0,1)
)

方法一:使用tidyverse工具链

适合熟悉tidy语法的用户,步骤清晰易读:

library(tidyverse)

# 转为长格式,提取每个列的原始名称(去掉后缀的点和数字)
df_long <- df %>%
  pivot_longer(-sample, names_to = "col_name", values_to = "value") %>%
  mutate(group = str_remove(col_name, "\\.*\\d+$")) # 匹配末尾的点和数字并删除

# 按样本和分组求和,再转回宽格式
df_result <- df_long %>%
  group_by(sample, group) %>%
  summarise(sum_value = sum(value), .groups = "drop") %>%
  pivot_wider(names_from = group, values_from = sum_value)

# 查看结果
df_result

方法二:使用Base R

无需额外安装包,适合轻量需求:

# 提取列名的分组前缀(去掉末尾的点和数字)
col_groups <- sub("\\.*\\d+$", "", colnames(df)[-1]) # 排除sample列

# 按分组对列求和
summed_cols <- tapply(colnames(df)[-1], col_groups, function(cols) rowSums(df[cols]))

# 合并sample列和求和结果
df_result_base <- cbind(df["sample"], as.data.frame(summed_cols))

# 查看结果
df_result_base

关键说明

  • 正则表达式\\.*\\d+$用于匹配列名末尾的任意数量的点(包括中文全角点)和数字,确保准确提取原始列名
  • 如果列名后缀格式有变化(比如_1),可调整正则表达式为_\\d+$
  • 两种方法最终输出结果与期望格式完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:40:40