如何获取两个数据帧的共享行的逻辑?
> a <- data.frame(x = 1:5, y = 7:11)
> b <- data.frame(x = c(4, 2, 6, 3, 3, 1), y = c(10, 16, 7, 9, 9, 7))
> a
x y
1 1 7
2 2 8
3 3 9
4 4 10
5 5 11
> b
x y
1 4 10
2 2 16
3 6 7
4 3 9
5 3 9
6 1 7
> a.indices <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
> b.indices <- c(TRUE, FALSE, FALSE, TRUE, TRUE, TRUE)
我想返回a.indices或b.indices。
答案 0 :(得分:2)
您可以对merge
和%in%
所做的事情进行组合
a.indices <- match(
do.call(paste, c(a, sep="\r")),
do.call(paste, c(b, sep="\r")), nomatch=0
)>0
您将行组合为单个值,然后使用匹配将一个集合与另一个集合进行比较。你也可以这样做
b.indices <- Reduce(function(vprev,vnow) vprev & !is.na(vnow),
Map(match, b,a), init=T)
(对于这两种方法,您可以交换a
和b
以获得相反的结果)。您可能希望进行测试以比较特定方案中的性能。