我最近遇到了寻找两个数据框的共同元素的问题。我的问题是我需要根据多个列查找通用元素。
说我有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函数可以正确执行此操作而不必担心边缘情况? (最好将另一种数据格式用于一组点吗?)
答案 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
包增加了处理数据帧的可能性。