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

如何在R中用dplyr/tidyr拼接两数据框对应列值生成新数据框

嘿,这个需求用dplyr就能轻松实现,我给你一步步拆解:

第一步:先构造示例数据

首先咱们先把你给出的data1和data2用代码还原出来(用tibble比基础的data.frame更整洁):

library(dplyr)

data1 <- tibble(
  LEVEL = c("L1", "L2"),
  V1 = c("a", "b"),
  V2 = c("c", "d")
)

data2 <- tibble(
  LEVEL = c("L1", "L2"),
  V1 = c("1", "2"),
  V2 = c("3", "4")
)

第二步:合并并拼接列值

核心思路是先通过LEVEL列把两个数据框合并,再把对应列的内容用下划线拼接起来:

data3 <- data1 %>%
  # 按LEVEL合并,给重名列加后缀区分
  inner_join(data2, by = "LEVEL", suffix = c("_from1", "_from2")) %>%
  # 对V1、V2列进行拼接
  mutate(
    V1 = paste(V1_from1, V1_from2, sep = "_"),
    V2 = paste(V2_from1, V2_from2, sep = "_")
  ) %>%
  # 只保留需要的列
  select(LEVEL, V1, V2)

# 查看最终结果
data3

运行后你会得到完美符合需求的data3:

# A tibble: 2 × 3
  LEVEL V1    V2   
  <chr> <chr> <chr>
1 L1    a_1   c_3  
2 L2    b_2   d_4  

进阶技巧:批量处理多列

如果你有很多类似V1、V2的列(比如V3、V4...),一个个写太麻烦,可以用across批量处理:

data3 <- data1 %>%
  inner_join(data2, by = "LEVEL", suffix = c("_1", "_2")) %>%
  mutate(
    # 批量处理所有以V开头的列
    across(starts_with("V"), ~paste(
      get(paste0(cur_column(), "_1")), 
      get(paste0(cur_column(), "_2")), 
      sep = "_"
    ))
  ) %>%
  select(LEVEL, starts_with("V"))

这样不管有多少个V开头的列,都能自动完成拼接,非常高效!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:49:03