首页 > 解决方案 > 是否有一个基本的 R 函数可以通过多列查找两个 data.frame 的公共元素?

问题描述

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

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

我的第一个想法是 rbind 两个点集并查找重复项,但这不能直接工作,因为一组点可能具有不在另一组中的重复项。

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

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 函数可以在不担心边缘情况的情况下正确执行此操作?(对一组点使用另一种数据格式会更好吗?)

标签: rdataframe

解决方案


我试图创建一个与您解释的内容相关的可重现示例。所以我用两个坐标组成了两个数据框。

如果你使用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包增加了处理数据帧的可能性。


推荐阅读