r - 是否有一个基本的 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 函数可以在不担心边缘情况的情况下正确执行此操作?(对一组点使用另一种数据格式会更好吗?)
解决方案
我试图创建一个与您解释的内容相关的可重现示例。所以我用两个坐标组成了两个数据框。
如果你使用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
包增加了处理数据帧的可能性。
推荐阅读
- python - MYSQL 中的密码错误(都是最新版本)?
- azure - 如何确定我在本地使用的 Azure Function 运行时版本?
- google-sheets - 谷歌表格查询 - 选择语句意外工作
- node.js - Docusign 不显示使用 docusign.Text.constructFromObject({}) 创建的字段
- c# - 重定向到 .NET 4.7.2 后无法编译 CSCORE
- python - Pygame MOUSEDOWN 不会停止注册
- python - 检查是否使用了外键;如果不是 -> 删除
- java - 将json数据反序列化为spark java中的字符串
- javascript - JavaScript 对变量的多重赋值
- php - 在 Laravel 中映射导出数据