如何合并 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
我有两个具有一些 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