是否有基本的R函数来查找两个data.frame通过多列的公共元素?

时间:2019-12-07 11:49:16

标签: r dataframe

我最近遇到了寻找两个数据框的共同元素的问题。我的问题是我需要根据多个列查找通用元素。

说我有df1和df2两个数据帧,它们的x和y列具有不同的值(基本上是平面中的两组点)。

我的第一个想法是同时保留两组点并查找重复项,但这不能直接起作用,因为一组点可能具有不在另一组中的重复项。

基本上,我的第二个想法是构建唯一标识符:

df1$Id = paste(df1$x,df1$y)
df2$Id = paste(df2$x,df2$y)

然后比较标识符:

common_points = df1[df1$Id %in% df2$Id,]

即使不是在不满意的情况下,它也几乎可以正常工作:使用我的方法[11,2]和[1,12]获得了相同的标识符。通过在粘贴公式(sep ='')中添加分隔符作为选项进行了更正。我对内部连接两个数据框还有另一个想法。

是否有基本R函数可以正确执行此操作而不必担心边缘情况? (最好将另一种数据格式用于一组点吗?)

1 个答案:

答案 0 :(得分:1)

我试图创建一个与您所解释的例子有关的可复制示例。 所以我用两个坐标组成了两个数据框。

如果您使用intersect,则会发现共有的行。

# reproducible example
set.seed(19)
df1 <- data.frame(x = sample(1:20, 100, replace = TRUE),
                  y = sample(1:20, 100, replace = TRUE))
df2 <- data.frame(x = sample(1:20, 100, replace = TRUE),
                  y = sample(1:20, 100, replace = TRUE))

# MUST CALL DPLYR!
library(dplyr)

# your solution
intersect(df1, df2)

警告:intersect是基本R函数。但是,dplyr包增加了处理数据帧的可能性。