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

如何在R数据框中合并具有相同后缀的列?

按后缀合并R数据框列的实现方法

这里给你两种实用的tidyverse方案,都用到了你提到的unite()函数,轻松搞定相同后缀列的合并:

方案一:长表转宽表法(更直观)

先把宽格式数据转成长格式,拆分列名的前缀和后缀,合并后再转回宽格式:

# 加载包
library(tidyverse)

# 构造示例数据框
df <- tibble(
  Forename_1 = "Joe",
  Surname_1 = "Bloggs",
  Forename_2 = "Dave",
  Surname_2 = "Jones"
)

# 核心处理代码
result <- df %>%
  # 把所有列转成长表,拆分列名为前缀(Forename/Surname)和后缀(1/2)
  pivot_longer(
    everything(),
    names_to = c("prefix", "suffix"),
    names_sep = "_"
  ) %>%
  # 按后缀分组
  group_by(suffix) %>%
  # 合并同一后缀的两个值为全名
  mutate(fullname = str_c(value, collapse = " ")) %>%
  ungroup() %>%
  # 保留需要的列并去重
  select(suffix, fullname) %>%
  distinct() %>%
  # 转回宽格式,添加Fullname前缀
  pivot_wider(
    names_from = suffix,
    values_from = fullname,
    names_prefix = "Fullname_"
  )

print(result)

运行后输出:

# A tibble: 1 × 2
  Fullname_1 Fullname_2
  <chr>      <chr>     
1 Joe Bloggs Dave Jones

方案二:按后缀筛选列合并法(更直接)

直接提取所有唯一后缀,循环筛选对应列并合并:

library(tidyverse)

df <- tibble(
  Forename_1 = "Joe",
  Surname_1 = "Bloggs",
  Forename_2 = "Dave",
  Surname_2 = "Jones"
)

# 提取所有唯一的后缀(比如_1、_2)
suffixes <- unique(str_remove(colnames(df), "^.*_"))

# 循环每个后缀,合并对应列并拼接结果
result <- map_dfc(suffixes, function(suf) {
  df %>%
    # 筛选以当前后缀结尾的列
    select(ends_with(suf)) %>%
    # 合并为Fullname_后缀的列,用空格分隔
    unite(paste0("Fullname_", suf), everything(), sep = " ")
})

print(result)

这个方案直接用ends_with()定位同后缀列,再用unite()完成合并,逻辑更贴近你一开始的思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:07:18