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

使用R语言基于ID判断两个数据集指定列是否匹配的技术问询

R语言按唯一ID比对两个数据框指定列的匹配情况

示例数据构造

先创建两个包含唯一ID和目标列的数据框,模拟实际场景:

# 构造DATA1
DATA1 <- data.frame(
  ID = c(1, 2, 3, 4),
  COL1 = c("A", "B", "C", "D"),
  COL2 = c(10, 20, 30, 40),
  COL3 = c(TRUE, FALSE, TRUE, FALSE),
  COL4 = c(1.1, 2.2, 3.3, 4.4)
)

# 构造DATA2(部分ID的列值存在差异,部分ID仅单侧存在)
DATA2 <- data.frame(
  ID = c(1, 2, 3, 5),
  COL1 = c("A", "X", "C", "E"),
  COL2 = c(10, 20, 35, 50),
  COL3 = c(TRUE, FALSE, TRUE, TRUE),
  COL4 = c(1.1, 2.3, 3.3, 5.5)
)

数据框示例展示

DATA1 内容

IDCOL1COL2COL3COL4
1A10TRUE1.1
2B20FALSE2.2
3C30TRUE3.3
4D40FALSE4.4

DATA2 内容

IDCOL1COL2COL3COL4
1A10TRUE1.1
2X20FALSE2.3
3C35TRUE3.3
5E50TRUE5.5

比对实现代码

使用dplyr包完成合并与匹配检查,逻辑清晰且易读:

library(dplyr)

# 按ID合并两个数据框,添加后缀区分数据源
merged_data <- full_join(DATA1, DATA2, by = "ID", suffix = c("_DATA1", "_DATA2"))

# 定义匹配检查函数:判断指定列在两个数据源中的值是否完全一致
check_column_match <- function(row) {
  target_cols <- c("COL1", "COL2", "COL3", "COL4")
  # 逐列比对,若任意列不匹配或某ID仅单侧存在,返回FALSE
  all(
    row[paste0(target_cols, "_DATA1")] == row[paste0(target_cols, "_DATA2")],
    na.rm = FALSE
  )
}

# 生成匹配结果列
merged_data <- merged_data %>%
  rowwise() %>%
  mutate(Match_Result = ifelse(check_column_match(cur_data()), "Yes", "No")) %>%
  ungroup()

# 输出最终结果
print(merged_data)

输出结果说明

运行代码后会得到包含原始列和匹配结果的数据框:

  • ID=1:所有目标列值完全匹配,输出Yes
  • ID=2:COL1、COL4值不匹配,输出No
  • ID=3:COL2值不匹配,输出No
  • ID=4:仅存在于DATA1,输出No
  • ID=5:仅存在于DATA2,输出No

内容的提问来源于stack exchange,提问作者ASAB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:40:24