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

在R环境中如何合并两表生成含匹配信息的新表

问题描述

我需要用两个数据表生成新表,具体如下:

表1:名称-代码对照表(成对匹配数据)

# Table1
Name   Code
 A      B
 A      C
 A      D
 A      E
 B      C
 B      D
    ...

表2:名称信息表(包含字符串类型信息)

# Table2
Name   info
 A      grade 1
 B      grade 2
 C      grade 3
 D      grade 4
 E      grade 5
    ...

目标表(Table3)

需要保留Name和Code的成对关系,同时为两者各自添加对应的info信息:

# Table3
Name    info    Code    info
 A     grade 1   B     grade 2
 A     grade 1   C     grade 3
 A     grade 1   D     grade 4
    ...

我尝试了以下代码,但只能生成包含Name、Info和Code的表,无法得到目标表:

merge(Table1, Table2, by = "Name") %>%
 select(Name, Code, Info)

请问在R环境中如何实现需求?


解决方案

你需要两次关联表2:第一次关联Table1的Name字段获取对应info,第二次关联Table1的Code字段(把Code当作Name去匹配表2的info),最后处理重复列名即可。

方法1:基础merge实现

# 第一步:关联Name对应的info
temp_table <- merge(Table1, Table2, by = "Name")
# 第二步:关联Code对应的info,用后缀区分重复列
result_table <- merge(temp_table, Table2, by.x = "Code", by.y = "Name", suffixes = c("_name", "_code"))
# 调整列顺序为目标格式
result_table <- result_table[, c("Name", "info_name", "Code", "info_code")]
# 可选:手动设置重复列名(不推荐,后续操作易出错)
colnames(result_table) <- c("Name", "info", "Code", "info")

方法2:dplyr链式操作

library(dplyr)

result_table <- Table1 %>%
  # 关联Name对应的info
  left_join(Table2, by = "Name") %>%
  # 关联Code对应的info,用后缀区分列
  left_join(Table2, by = c("Code" = "Name"), suffix = c("_name", "_code")) %>%
  # 调整列顺序
  select(Name, info_name, Code, info_code) %>%
  # 可选:设置重复列名
  rename(info = info_name, info = info_code)

关键说明

  • 你之前的代码只完成了一次关联,仅获取了Name对应的info,缺少Code对应的info,因此需要第二次关联。
  • 建议保留带后缀的列名(如info_name和info_code),避免重复列名导致后续操作出现歧义;如果必须和目标表的重复列名一致,再手动修改列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:23:22