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

R语言按指定列外合并不等列dataframe并去重保留唯一行

实现方法

你要的操作是标准的按多字段全外连接,不需要额外手动去重:关联键(a、b、c三列)取值完全相同的行会在连接时自动合并,两个数据集的独有行都会被保留,仅在a2中存在的d列会自动给a1独有的行填充缺失值。

Python(pandas)版本

import pandas as pd
import numpy as np

# 替换成你自己的数据读取逻辑即可
a1 = pd.DataFrame({
    'a': [1,2,3,4,5],
    'b': ['apple', 'bees', 'candy', 'dice', 'donut'],
    'c': ['x', 'a', 'a', 's', 'd']
})
a2 = pd.DataFrame({
    'a': [1,2,6],
    'b': ['apple', 'bees', 'coffee'],
    'c': ['x', 'a', 'r'],
    'd': ['a', 'd', 's']
})

a3 = pd.merge(a1, a2, on=['a', 'b', 'c'], how='outer')
# 可选:将默认的NaN缺失值替换为NA,行号从1开始,匹配你给出的输出格式
a3 = a3.replace(np.nan, 'NA')
a3.index = range(1, len(a3)+1)

打印a3输出如下,完全符合你的预期:

a       b  c   d
1  1   apple  x   a
2  2    bees  a   d
3  3   candy  a  NA
4  4    dice  s  NA
5  5   donut  d  NA
6  6  coffee  r   s

R语言版本

用R内置的merge函数即可,不需要额外加载包:

# 替换成你自己的数据读取逻辑
a1 <- data.frame(
  a = c(1,2,3,4,5),
  b = c('apple','bees','candy','dice','donut'),
  c = c('x','a','a','s','d')
)
a2 <- data.frame(
  a = c(1,2,6),
  b = c('apple','bees','coffee'),
  c = c('x','a','r'),
  d = c('a','d','s')
)

a3 <- merge(a1, a2, by = c('a','b','c'), all = TRUE)

直接输出a3就是你要的结果,缺失值默认填充为NA,行号从1开始。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:48:32