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

如何按表头名称合并多列?两种合并场景求助

R实现Excel列的两种合并方案

先构造与你提供的Excel结构一致的示例数据:

# 模拟原Excel数据
df <- data.frame(
  A1 = c(1,2,3,4,NA,NA),
  A2 = c(5,6,7,8,9,10),
  B1 = c(11,12,13,NA,NA,NA),
  B2 = c(14,NA,NA,NA,NA,NA),
  B3 = c(15,16,17,18,NA,NA),
  C1 = c(19,20,21,NA,NA,NA),
  C2 = c(22,23,24,25,26,27),
  # 补充H系列空列,还原原数据结构
  H1 = rep(NA,6), H2=rep(NA,6), H3=rep(NA,6), H4=rep(NA,6),
  H5=rep(NA,6), H6=rep(NA,6), H7=rep(NA,6), H8=rep(NA,6),
  H9=rep(NA,6), H10=rep(NA,6), H11=rep(NA,6), H12=rep(NA,6)
)

方案1:按表头中的数字合并列

将所有表头包含相同数字的列合并,最终生成12列(对应数字1-12):

library(tidyverse)

df_num_merge <- df %>%
  # 宽表转长表,拆分列名与数值
  pivot_longer(everything(), names_to = "col", values_to = "val") %>%
  # 提取列名中的数字部分
  mutate(num = str_extract(col, "\\d+") %>% as.integer()) %>%
  # 过滤空值
  filter(!is.na(val)) %>%
  # 按数字分组,收集每组的所有非空值
  group_by(num) %>%
  summarise(values = list(val)) %>%
  # 按数字排序,确保列顺序为1-12
  arrange(num) %>%
  # 转回宽表,设置列名为Column X
  pivot_wider(names_from = num, values_from = values, names_prefix = "Column ") %>%
  # 展开列表,长度不足的位置补NA
  unnest_wider(everything(), names_sep = "") %>%
  # 强制按Column 1到Column 12的顺序排列
  select(paste0("Column ", 1:12))

# 打印结果(空值显示为空白)
print(df_num_merge, na.print = "")

方案2:按表头的字母前缀合并列

将所有以相同字母开头的列合并,最终生成8列(对应A-H):

df_letter_merge <- df %>%
  pivot_longer(everything(), names_to = "col", values_to = "val") %>%
  # 提取列名中的字母前缀
  mutate(letter = str_extract(col, "[A-Z]")) %>%
  filter(!is.na(val)) %>%
  # 按字母分组,收集每组非空值
  group_by(letter) %>%
  summarise(values = list(val)) %>%
  # 按字母顺序排序
  arrange(letter) %>%
  pivot_wider(names_from = letter, values_from = values, names_prefix = "Column ") %>%
  unnest_wider(everything(), names_sep = "") %>%
  # 强制按Column A到Column H的顺序排列
  select(paste0("Column ", LETTERS[1:8]))

# 打印结果(空值显示为空白)
print(df_letter_merge, na.print = "")

为什么直接用rbind失败?

rbind是按行拼接数据框,要求待拼接的对象列数一致、结构匹配。而你的需求是将同一组列的非空值按顺序堆叠,需要先把列转成行、分组收集值,再转回宽表,直接用rbind无法处理不同长度的列分组逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:16:17