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

R语言批量合并名称相似列:将同前缀多列合并为单列

批量合并R数据框同前缀列(基于coalesce)

示例数据构造

Var1_E1_C1 <- c(1, NA, NA, 1, 1)
Var1_E1_C2 <- c(NA, 3, 2, NA, NA)
Var23_E2_C1 <- c(NA, 2, NA, 1, 1)
Var23_E2_C2 <- c(3, NA, 1, NA, NA)

df <- data.frame(Var1_E1_C1, Var1_E1_C2, Var23_E2_C1, Var23_E2_C2)

简洁批量解决方案(tidyverse)

利用tidyr的pivot_longer自动提取列前缀,结合dplyr的coalesce完成合并,无需手动指定40组列名:

library(dplyr)
library(tidyr)

result <- df %>%
  pivot_longer(
    everything(),
    names_to = c("prefix", ".value"),
    # 正则匹配:提取_C1/_C2之前的部分作为分组前缀
    names_pattern = "(.*)_C\\d+"
  ) %>%
  group_by(prefix) %>%
  summarise(across(everything(), ~coalesce(!!!.x))) %>%
  pivot_wider(names_from = prefix, values_from = everything())

另一种基础循环实现

如果偏好基础循环写法,可通过提取前缀批量处理:

library(dplyr)

# 自动提取所有待合并的列前缀
prefixes <- unique(sub("_C\\d+$", "", colnames(df)))

# 批量合并每组前缀对应的列
result <- bind_cols(
  lapply(prefixes, function(p) {
    df %>% 
      select(starts_with(p)) %>% 
      coalesce(!!!.) %>% 
      as.data.frame() %>% 
      setNames(p)
  })
)

验证结果

运行后得到目标数据框:

print(result)
#   Var1_E1 Var23_E2
# 1       1        3
# 2       3        2
# 3       2        1
# 4       1        1
# 5       1        1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:12:37