R中如何使用dplyr按另一数据框匹配列值并输出校验信息
dplyr跨表校验实现方法
直接通过左连接关联两个表,再按规则做条件判断即可,全程用dplyr管道操作完成。
完整可运行代码
library(dplyr) # 构造题目给出的两个测试数据集 data1 <- tibble( id1 = c("A", "B", "C", "D", "E"), var1 = c("chair", "table", "glass", "phone", "pistol") ) data2 <- tibble( id2 = c("G", "H", "I", "E", "D"), var2 = c("bike", "laptop", "camera", "pistol", "knife") ) # 执行校验逻辑 final_data <- data1 %>% # 左连接匹配许可表,关联键为data1的id1对应data2的id2 left_join(data2, by = c("id1" = "id2")) %>% mutate( license = case_when( # 未匹配到许可记录 is.na(var2) ~ "not_needed", # 匹配且申报物品和许可物品一致 var1 == var2 ~ "ok_checked", # 匹配但物品不一致 TRUE ~ "danger" ) ) %>% # 不需要保留许可物品列的话可以执行下面这行,需要就注释掉 select(-var2)
校验结果对应逻辑
运行后输出的final_data每行标记完全符合要求:
- A、B、C三个ID没有在许可表中匹配到记录,license列为
not_needed - ID为D匹配成功,但申报的phone和许可的knife不符,license列为
danger - ID为E匹配成功,申报的pistol和许可物品完全一致,license列为
ok_checked
注意:如果存在单个ID对应多条许可记录的情况,需要先对data2做去重处理,避免左连接后产生多余行数,去重可使用
distinct(id2, .keep_all = TRUE)实现。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

