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

如何在R中合并两个data.frame,保留全部数据并匹配对应字段

解决方案

你需要使用**全外连接(full join)**来实现需求——dplyr::inner_join仅保留两表匹配的行,right_join仅保留右表所有行,都不符合你要保留所有行的要求。full_join可以保留两个数据框的所有行,同时按V1和V3字段匹配,缺失数据自动用NA填充。

代码实现

library(dplyr)

# 原始数据框定义
df1 = structure(list(V1 = c("ASP28", "ASP28", "ASP28", "HSD29", "HSD29", 
        "GLN30"), V3 = c("GLN103", "ASP105", "PRO107", "GLN103", "PRO107", 
        "PRO107"), V5 = c(0.008, 0.484, 0.058, 0.008, 3.208, 4.616)), row.names = c(1L, 
        4L, 5L, 6L, 7L, 8L), class = "data.frame")
df2 = structure(list(V1 = c("ASP28", "ASP28", "ASP28", "ASP28", "ASP28", 
    "HSD29"), V3 = c("ASP28", "GLN103", "ALA46", "HSD47", "THR350", 
    "ASP28"), V5 = c(0.883, 0.158, 0.508, 0.025, 0.125, 1.391)), row.names = c(2L, 
    3L, 4L, 5L, 6L, 8L), class = "data.frame")

# 执行全外连接
merged_result <- full_join(df1, df2, by = c("V1", "V3"))

# 输出结果
print(merged_result)

输出结果

运行代码后得到的结果与你提供的示例完全一致:

V1      V3  V5.x V5.y
1  ASP28 GLN103 0.008 0.158
2  ASP28 ASP105 0.484    NA
3  ASP28 PRO107 0.058    NA
4  HSD29 GLN103 0.008    NA
5  HSD29 PRO107 3.208    NA
6  GLN30 PRO107 4.616    NA
7  ASP28  ASP28    NA 0.883
8  ASP28  ALA46    NA 0.508
9  ASP28  HSD47    NA 0.025
10 ASP28 THR350    NA 0.125
11 HSD29  ASP28    NA 1.391

关键说明

  • full_join()会保留两个数据框中所有V1和V3的组合
  • 仅在df1中存在的行,V5.y字段填充NA;仅在df2中存在的行,V5.x字段填充NA
  • 两表中V1和V3都匹配的行,会将各自的V5值分别存入V5.x(来自df1)和V5.y(来自df2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:07:50