r - 基于一列连接两个数据集
问题描述
我有两个不均匀行的数据集(DF1、DF2),我正在尝试使用两个数据集中都存在的唯一 ID 列合并这两个数据集。我的条件是我只想要 DF1 和 DF2 中都存在的具有匹配 ID 的行,这意味着如果 DF2 中的 ID 不在 DF1 中,它们将被删除,反之亦然。我还希望 DF1 和 DF2 中的所有相应列都在新的 DF3 中。
我试图做一个 semi_join 但它只包括来自 DF1 的列而不是 DF2。以及 inner_join 返回具有 50000 个变量的数据,这不起作用,因为 DF1 包含 40,000 个变量和 DF 2 90,000 个变量,因此结果应该少于 40,000 个变量。
test <- semi_join(x = DF1, y = DF2, by = "ID")
test2 <- inner_join(x = DF1, y = DF2, by = "ID")
给出了 DF 1 和 2,而 DF3 是我想要的结果。
DF1
ID Name Date
1 98251 MacDonald, Nich 100000 2013/07/21
2 98252 John, B~ 100000 2013/06/10
3 98253 Larry, B~ 100000 2013/04/13
DF2
ID Name Action
1 98252 Bond, Nich 100000 Eat
2 98253 John, B~ 100000 Eat
3 98256 Larry, B~ 100000 Eat
DF3
ID Name Date Action
2 98252 John, B~ 100000 2013/06/10 Eat
3 98253 Larry, B~ 100000 2013/04/13 Eat
`
解决方案
以及 inner_join 返回具有 50000 个变量的数据,这不起作用,因为 DF1 包含 40,000 个变量和 DF 2 90,000 个变量,因此结果应该少于 40,000 个变量。
内连接产生比 DF1 中的行更多的行(您使用变量:假设您的意思是行)的原因是因为如果 inner_join 匹配多个匹配项,它会将所有此类组合作为额外的 10k 行返回。如 join{dplyr} 中所述:
所以你需要做的是使用唯一的'ID':
test2 <- unique(inner_join(x = DF1, y = DF2, by = "ID"),by = "ID")
您最终将在 test2 中获得 40k 行。但是,我们正在做的是删除 ID 的所有第二个匹配项,以防有多个匹配项。如果要以相反的顺序删除:请改用:
test2 <- unique(inner_join(x = DF1, y = DF2, by = "ID"),by = "ID",fromLast= TRUE)
希望这可以帮助!
推荐阅读
- c# - 在 c# 类中设置值的最佳最短方法
- javascript - Jquery rows togle 类独立表
- python - 存储数据库中的值添加检查元素是否添加到列表末尾
- reactjs - ReactJs 中的多个 CKEditor5(不同版本) - 以 'CKEditorError: ckeditor-duplicated-modules' 结尾
- replace - 用于检测字幕的 MS Word 正则表达式
- maven - 相同的工件使用相同依赖项的不同版本
- reactjs - 为什么我们不在 React 中的 render 方法前面使用 super
- java - 你能创建一个包,里面有进口吗?
- html - 具有 CSS Sprite 背景的响应式圆圈
- node.js - 为什么我们需要另一个模式来进行模式拼接?