首页 > 解决方案 > 是否有一个很好的 R 函数来分离两个数据帧之间的唯一列值,保持行?

问题描述

基本上我有2个具有这种基本结构的数据框:

Col1 Col2 Col3 Col4
啊啊啊 12 xxx 32b
铁氟龙 21 xxx 14f
伊德 12 xxx 54b
韦斯 95 xxx 54r
rtf 44 xxx 99q
fvg 87 xxx 55小时

因此,第 1 列中的一些值在两个数据帧中重复,我想创建一个新数据帧,其中每个数据帧的 Col1 中只有具有唯一值的行,所以在伪代码中:

Unique_to_df1 <- df1[Unique_Function(查找 Col1 值不在 df2 中的行)] Unique_to_df2 <- df2[Unique_Function(查找 Col1 值不在 df1 中的行)]

我尝试了一些函数,但它们要么似乎只导出 Col1 的唯一值,而不是整个表,要么似乎只适用于从一个数据帧中删除重复值,而不是在两个数据帧之间进行比较。任何帮助/建议将不胜感激!

标签: rdataframe

解决方案


anti_join(x, y)删除 x 中与 y 匹配的所有观测值。

df1 <- data.frame(
  stringsAsFactors = FALSE,
              Col1 = c("aaa", "tfe", "eed", "wes", "rtf", "fvg"),
              Col2 = c(12L, 21L, 12L, 95L, 44L, 87L),
              Col3 = c("xxx", "xxx", "xxx", "xxx", "xxx", "xxx"),
              Col4 = c("32b", "14f", "54b", "54r", "99q", "55h")
)


df2 <- data.frame(
  stringsAsFactors = FALSE,
              Col1 = c("a", "tfe", "ee", "ws", "rt", "fvg"),
              Col2 = c(12L, 21L, 12L, 95L, 44L, 87L),
              Col3 = c("xxx", "xxx", "xxx", "xxx", "xxx", "xxx"),
              Col4 = c("32b", "14f", "54b", "54r", "99q", "55h")
)

library(dplyr)

unique1 <- df1 %>% 
  anti_join(df2)

unique2 <- df2 %>% 
  anti_join(df1)


# Join them together:

rbind(unique1, unique2)

#>   Col1 Col2 Col3 Col4
#> 1  aaa   12  xxx  32b
#> 2  eed   12  xxx  54b
#> 3  wes   95  xxx  54r
#> 4  rtf   44  xxx  99q
#> 5    a   12  xxx  32b
#> 6   ee   12  xxx  54b
#> 7   ws   95  xxx  54r
#> 8   rt   44  xxx  99q

reprex 包于 2021-03-16 创建(v0.3.0)


推荐阅读