获得R中两个数据帧的区别

时间:2014-10-23 08:01:06

标签: r

如果,我有两个数据帧,每个数据帧包含12列,并分别有4781和4807行,那么,我想要这两个数据帧的交集。我确实在比较包中使用了compare命令,我发现一个是另一个的子集。但是,我如何得到两者的区别?谢谢!

如果a1和a2是两个数据帧,那么,

class(a1)     class(a1$V1)
data.frame    factor

class(a2)     class(a2$V1)
data.frame    factor

我需要那些存在于更大数据帧中但不存在于其他数据帧中的元素

1 个答案:

答案 0 :(得分:0)

测试数据集:

> aa = data.frame(x=1:10,y=letters[1:10])

分为两个重叠的数据框。这些与您的数据类似 - 每个行都有一些共同的行,每行都有一些独特的行:

> a1 = aa[1:8,]
> a2 = aa[5:10,]
> a1
  x y
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
6 6 f
7 7 g
8 8 h
> a2
    x y
5   5 e
6   6 f
7   7 g
8   8 h
9   9 i
10 10 j

然后使用dplyr运算符:

a2独有:

> dplyr::setdiff(a2,a1)
   x y
1  9 i
2 10 j

那可能就是你想要的。我还是会说明其他一些集合操作:

a1独有:

> dplyr::setdiff(a1,a2)
  x y
1 1 a
2 2 b
3 3 c
4 4 d

两者:

> intersect(a1,a2)
  x y
1 5 e
2 6 f
3 7 g
4 8 h

这些是a1a2的维恩图的三个部分。因此,如果我们将这三个部分组合在一起,我们应该完全退回:

> rbind(setdiff(a1,a2), intersect(a1,a2), setdiff(a2,a1)) ==  aa
      x    y
1  TRUE TRUE
2  TRUE TRUE
3  TRUE TRUE
4  TRUE TRUE
5  TRUE TRUE
6  TRUE TRUE
7  TRUE TRUE
8  TRUE TRUE
9  TRUE TRUE
10 TRUE TRUE