使用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 内容
| ID | COL1 | COL2 | COL3 | COL4 |
|---|---|---|---|---|
| 1 | A | 10 | TRUE | 1.1 |
| 2 | B | 20 | FALSE | 2.2 |
| 3 | C | 30 | TRUE | 3.3 |
| 4 | D | 40 | FALSE | 4.4 |
DATA2 内容
| ID | COL1 | COL2 | COL3 | COL4 |
|---|---|---|---|---|
| 1 | A | 10 | TRUE | 1.1 |
| 2 | X | 20 | FALSE | 2.3 |
| 3 | C | 35 | TRUE | 3.3 |
| 5 | E | 50 | TRUE | 5.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
相关产品推荐
相关产品推荐

