两个数据帧的共享行的逻辑

时间:2014-07-08 20:53:01

标签: r

如何获取两个数据帧的共享行的逻辑?

> 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。

1 个答案:

答案 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)

(对于这两种方法,您可以交换ab以获得相反的结果)。您可能希望进行测试以比较特定方案中的性能。