如何合并 2 个数据帧而不在 R 中包含重复数据

How to combine 2 dataframes without including duplicated data in R

我有两个具有一些 overlapping/duplicated 值的单列基因列表数据框。我希望基本上找到仅存在于 DF1 而不是同时存在于 DF1 和 DF2 中的基因。

**DF1**     **DF2**
ABCD1        ABCD1
ACSL4        ACTC1
ACVRL1        ADNP
AFF2          AFF2

我如何合并这 2 个结果,以便在新的 Dataframe 中只给我来自 DF1 的非重叠结果,这样:

**DF3**
ACSL4
ACVRL1

到目前为止,我只是使用 rbind 组合 DF1 和 DF2,然后尝试使用

删除重复项
DF3 <- rbind(DF1, DF2)
DF3[!duplicated(DF3) | duplicated(DF3, fromLast=TRUE)),, drop = FALSE]

这似乎工作正常,但有更好的方法吗?

我相信来自 {dplyr} 的 anti_join 就是您要找的东西

library(dplyr)

df1 <- tribble(
  ~var, 
  "ABCD1",
  "ACSL4",
  "ACVRL1",
  "AFF2"
)

df2 <- tribble(
  ~var, 
  "ABCD1",
  "ACTC1",
  "ADNP",
  "AFF2"
)

(df3 <- anti_join(df1, df2))
#> Joining, by = "var"
#> # A tibble: 2 x 1
#>   var   
#>   <chr> 
#> 1 ACSL4 
#> 2 ACVRL1

reprex package (v2.0.0)

创建于 2021-06-13

实际上您想排除 DF1 出现在 DF2 中的那些。

DF1[!DF1$V1 %in% DF2$V1,,F]
#       V1
# 2  ACSL4
# 3 ACVRL1