如果,我有两个数据帧,每个数据帧包含12列,并分别有4781和4807行,那么,我想要这两个数据帧的交集。我确实在比较包中使用了compare命令,我发现一个是另一个的子集。但是,我如何得到两者的区别?谢谢!
如果a1和a2是两个数据帧,那么,
class(a1) class(a1$V1)
data.frame factor
class(a2) class(a2$V1)
data.frame factor
我需要那些存在于更大数据帧中但不存在于其他数据帧中的元素
答案 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
这些是a1
和a2
的维恩图的三个部分。因此,如果我们将这三个部分组合在一起,我们应该完全退回:
> 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