我将冒险猜测一个答案。
I think semi_join
from dplyr
会做你想做的事,甚至考虑到重复的行。
首先注意帮助文件?semi_join
:
返回 x 中 y 中存在匹配值的所有行,仅保留 x 中的列。
半连接与内连接不同,因为内连接
join 将为 y 的每个匹配行返回一行 x,
半连接将在哪里
绝不重复 x 的行。
好的,这表明以下操作应该正确失败:
df.a <- data.frame( x=c(1:5,1), y=c(6:10,6) )
df.b <- data.frame( x=1:7, y=6:12 )
identical(semi_join(df.b, df.a), semi_join(df.a, df.a))
这使FALSE
,正如预期的那样
> semi_join(df.b, df.a)
Joining by: c("x", "y")
x y
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
但是,以下内容应该通过:
df.c <- data.frame( x=c(1:7, 1), y= c(6:12, 6) )
identical(semi_join(df.c, df.a), semi_join(df.a, df.a))
确实如此,给予TRUE
.
第二semi_join(df.a, df.a)
需要进行规范排序df.a
.