【问题标题】:Is there a function in R to perform an exclusive full join?R中是否有执行独占完全连接的功能?
【发布时间】:2023-03-13 14:20:01
【问题描述】:

我正在合并两个有一些重叠观察的数据框。这些观察结果不会在所有列上重叠,因此它们并不相同,但在我认为对链接很重要的列上它们是相同的。如何合并/加入以排除匹配的观察结果?

我熟悉不同的联接函数以及如何使用merge() 执行内部和外部联接,但我没有看到用于排除构成内部联接的行的选项。

这是一个类似的问题,Exclusive Full Join in r 但它假设每个数据帧中有不同的列会在完全连接时产生 NA。如果数据框共享所有相同的列,你会怎么做?

我正在使用的解决方法是使用duplicated() from first 和 last 在完全加入后删除行。有没有更优雅的方法来获取内连接的补码?

df_joined <- merge(df1, df2, all = TRUE)
df_joined <- subset(df_joined, !(duplicated(df_joined[ 
,linking_cols])==TRUE | duplicated(df_joined[ ,linking_cols], fromLast = 
TRUE)==TRUE))

【问题讨论】:

  • 单个反连接将删除匹配的行,但也会删除第二个数据帧中的任何新行。我想保留两个数据框的所有无与伦比的贡献。

标签: r join outer-join


【解决方案1】:

你需要结合两个反连接

library(dplyr)
bind_rows(
  anti_join(df1, df2),
  anti_join(df2, df1),
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2022-01-20
    • 2013-06-02
    • 2011-12-10
    相关资源
    最近更新 更多