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

在R中如何用left_join合并结构不同的dataframe并匹配添加列?

解决df_1和df_2的匹配合并问题

问题分析

df_1中每个Name对应一行记录,而df_2中同一个ID+Company下的Name被拆分为Name_1、Name_2等多列,需要先将df_2转换为与df_1结构匹配的长格式,再通过left_join合并目标列。

解决方案(使用tidyverse工具)

1. 加载所需包

library(tidyverse)

2. 整理df_2为匹配格式

将df_2中所有Name_开头的列转成单列Name,同时保留需要的匹配字段和目标字段:

df_2_clean <- df_2 %>%
  pivot_longer(
    cols = starts_with("Name_"),  # 自动匹配所有Name_开头的列,支持扩展
    names_to = NULL,              # 丢弃原列名(不需要保留Name_1/Name_2标识)
    values_to = "Name",           # 生成新的Name列
    values_drop_na = TRUE         # 过滤掉Name为NA的无效行
  )

整理后的df_2_clean结构如下:

IDCompanyNameAchiev
131ABCAlex1234
131ABCMarian1234
206DEFPeter2341
206DEFMaria2341
5EFDMila43
2SDFMaya22

3. 合并df_1与整理后的df_2

通过ID、Company、Name三个字段进行左连接,将Achiev(及其他需要的字段)添加到df_1中:

# 若需要添加多个字段,只需在select中补充列名即可
df_combined <- df_1 %>%
  left_join(
    df_2_clean %>% select(ID, Company, Name, Achiev),
    by = c("ID", "Company", "Name")
  )

最终合并结果

IDCompanyNameDegreeAchiev
131ABCAlex01234
131ABCMarian11234
206DEFPeter12341
206DEFMaria02341
5EFDMila143
2SDFMaya022

扩展说明

  • 若df_2中有更多Name_开头的列(如Name_3、Name_4),starts_with("Name_")会自动匹配,无需修改代码;
  • 若需要添加除Achiev外的其他字段,只需在select(ID, Company, Name, Achiev)中补充对应列名即可(如select(ID, Company, Name, Achiev, Score, Rank))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:35:19