繁体   English   中英

如何使用 Dplyr 检查 R 中的变量分组的 2 个数据帧的两列的值是否存在差异?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM