在两个数据帧之间找到相同的配对值

时间:2019-06-28 13:50:18

标签: r

我正在使用R来标识数据帧的两列中的配对值,该值与另一个数据帧的两列中的配对值相同。我以为自己找到了解决方案,但结果与我的预期不符,我想知道是否有人可以解释原因。

df1看起来像这样:

Col1 Col2 Col3
A   1000    5
A   1500    10
A   2000    15
A   2500    20
B   900 5
B   1200    10
B   1500    15
C   1000    5
C   1200    10
C   1700    15
C   2200    20
C   2250    22  

df2包含与df1相同的内容,外加一些其他不匹配的行:

Col1 Col2 Col3
A   1000    5
A   1500    10
A   2000    15
A   2500    20
A   3000    20
A   3200    22
A   3400    25
B   900 5
B   1200    10
B   1500    15
B   1700    20
B   1900    26
C   1000    5
C   1200    10
C   1700    15
C   2200    20
C   2250    22
C   2400    25
C   3000    30
C   3500    31

我想在df1的Col1和Col2中找到配对的值,这些值也在df2的Col1和Col2中找到。我无法比较数据帧之间的整个行,因为Col3中的值在数据帧之间可能有所不同。我使用以下代码在df1的Col1和Col2中查找值,这些值也在df2的Col1和Col2中找到:

x = subset(df1, Col1 %in% df2$Col1 & Col2 %in% df2$Col2)

哪个返回预期结果:

Col1 Col2 Col3
A   1000    5
A   1500    10
A   2000    15
A   2500    20
B   900 5
B   1200    10
B   1500    15
C   1000    5
C   1200    10
C   1700    15
C   2200    20
C   2250    22

但是,当我切换哪个数据帧与另一个数据帧时:

y = subset(df2, Col1 %in% df1$Col1 & Col2 %in% df1$Col2)

我得到了相同的结果,只是现在又增加了一行B 1700 20:

Col1 Col2 Col3
A   1000    5
A   1500    10
A   2000    15
A   2500    20
B   900 5
B   1200    10
B   1500    15
B   1700 20
C   1000    5
C   1200    10
C   1700    15
C   2200    20
C   2250    22

请注意,在df1中找不到B 1700 20,为什么在此结果中返回它?我认为我的代码没有按照我的想法做,也许Col1和Col2的配对性质实际上并未保留在数据帧之间?我将不胜感激任何改进我的代码的解释和建议!

1 个答案:

答案 0 :(得分:1)

这是inner_join

的情况
library(dplyr)
out1 <- inner_join(df1, df2[1:2], by = c("Col1", "Col2"))
out2 <- inner_join(df1, df1[1:2], by = c("Col1", "Col2"))
identical(nrow(out1), nrow(out2))

还要注意,intersect中的dplyr可以获取data.frame并返回一个data.frame

out1 <-  intersect(df1, df2)
out2 <- intersect(df2, df1)

在示例中,两个数据集具有相同的值。如果要比较列的子集,请对数据集进行子集并执行intersect。区别在于,与inner_join

相比,我们仅获得这些列作为输出