R语言使用dplyr按id匹配两数据框列值并校验一致性的实现方法
R dplyr实现两表ID匹配校验方案
核心思路
以采集表dat1为基准做左连接,保留dat1所有行,匹配基准表dat2的对应gear值,再按校验规则生成CHECK列,最终整理为要求的三列结构。
校验规则:
- 若ID在基准表存在,且两表gear值相等 → CHECK返回
TRUE - 若ID在基准表存在,但两表gear值不等 → CHECK返回
FALSE - 若ID在基准表无匹配记录 → CHECK返回
NA
完整代码
library(dplyr) library(tibble) # 构造示例数据 id1 = c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10") Gear1 = c("A","B","C","D","E","F","G","H","I","G") dat1 = tibble(id1,Gear1) id2 = c("A1","A4","A2","A5","A13","A3","A9","A8","A7","A20","A21","A23","A33") Gear2 = c("A","E","A","E","B","C","I","B","G","G","B","D","E") dat2 = tibble(id2,Gear2) # 核心处理逻辑 res <- dat1 %>% left_join(dat2, by = c("id1" = "id2")) %>% mutate(CHECK = case_when( is.na(Gear2) ~ NA, Gear1 == Gear2 ~ TRUE, TRUE ~ FALSE )) %>% select(id = id1, gear = Gear1, CHECK)
输出结果预览
运行代码后得到的结果如下:
| id | gear | CHECK |
|---|---|---|
| A1 | A | TRUE |
| A2 | B | FALSE |
| A3 | C | TRUE |
| A4 | D | FALSE |
| A5 | E | TRUE |
| A6 | F | NA |
| A7 | G | TRUE |
| A8 | H | FALSE |
| A9 | I | TRUE |
| A10 | G | NA |
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

