![](/img/trans.png)
[英]How can i merge two data frames in R by the same values in different columns using base or dplyr?
[英]How can I check the values of two columns of 2 data frames for discrepancies grouped by a variable in R using Dplyr?
我有一个数据框A,说:
ID | 变量 |
---|---|
一个 | 电话 |
乙 | 车 |
C | 自行车 |
D | 椅子 |
乙 | 鼠 |
Z | 不适用 |
现在我有另一个数据框 B,其中包含所有通过 id 注册的产品:
ID | 变量2 |
---|---|
一个 | 电话 |
一个 | 车 |
乙 | 不适用 |
C | 自行车 |
C | 电话 |
D | 椅子 |
D | 电话 |
D | 车 |
乙 | 椅子 |
乙 | 电话 |
乙 | 车 |
Z | 车 |
H | 自行车 |
我想通过 id 检查数据框 A 中声明的值是否存在于注册数据框 B 中。实际上是为了改变一个列,该列将通过 id 检查条件并相应地返回 TRUE 或 FALSE。
理想情况下,生成的 output 必须在 R 中显示一个数据帧,如下所示:
ID | 变量 | 查看 |
---|---|---|
一个 | 电话 | 真的 |
乙 | 车 | 错误的 |
C | 自行车 | 真的 |
D | 椅子 | 真的 |
乙 | 鼠 | 错误的 |
Z | 不适用 | 错误的 |
R 中的数据如下:
library(dplyr)
id = c("A","B","C","D","E","Z")
var = c("phone","car","bike","chair","mouse",NA);var
A = tibble(id,var);A
id = c(rep("A",2),"B",rep("C",2),rep("D",3),rep("E",3),"Z","H")
var2 = c("phone","car",NA,"bike","phone","chair","phone","car","chair","phone","car","car","bike")
B = tibble(id,var2);B
有什么帮助吗?
使用left_join
的解决方法并使用每个group_by
的比较创建“CHECK”以获得 TRUE/FALSE,其中第一行是右行,并将 NA 替换为 FALSE,如下所示:
library(tibble)
id = c("A","B","C","D","E","Z")
var = c("phone","car","bike","chair","mouse",NA);var
id = c(rep("A",2),"B",rep("C",2),rep("D",3),rep("E",3),"Z")
var2 = c("phone","car",NA,"bike","phone","chair","phone","car","chair","phone","car","car")
B = tibble(id,var2);B
library(dplyr)
A %>%
left_join(., B, by = "id") %>%
group_by(id) %>%
mutate(CHECK = var == var2,
CHECK = replace(CHECK, is.na(CHECK), FALSE)) %>%
filter(row_number() == 1) %>%
ungroup() %>%
select(-var2)
#> # A tibble: 6 × 3
#> id var CHECK
#> <chr> <chr> <lgl>
#> 1 A phone TRUE
#> 2 B car FALSE
#> 3 C bike TRUE
#> 4 D chair TRUE
#> 5 E mouse FALSE
#> 6 Z <NA> FALSE
使用reprex v2.0.2创建于 2022-09-03
您可以加入两个数据框并检查all
值是否存在于另一个中。
library(dplyr)
A %>%
left_join(B, by = 'id') %>%
group_by(id, var) %>%
summarise(CHECK = all(var %in% var2), .groups = "drop")
# id var CHECK
# <chr> <chr> <lgl>
#1 A phone TRUE
#2 B car FALSE
#3 C bike TRUE
#4 D chair TRUE
#5 E mouse FALSE
#6 Z NA FALSE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.