You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:33:40