R语言使用for循环逐行对比两个dataframe并生成匹配标记
# 构建模拟数据集 d1 <- data.frame( a = c(1,2,3), b = c(4,5,6) ) d2 <- data.frame( a = c(2,0,2), b = c(5,5,6) ) # 初始化d1的flag列,默认值为0(未匹配) d1$flag <- 0 # 双层for循环匹配 for (i in 1:nrow(d1)) { for (j in 1:nrow(d2)) { # 判断当前d1行和d2行的a、b两列是否完全匹配 if (d1$a[i] == d2$a[j] && d1$b[i] == d2$b[j]) { # 匹配成功则将flag设为1 d1$flag[i] <- 1 # 已找到匹配项,直接跳出内层循环,无需继续校验d2剩余行 break } } } # 查看结果 print(d1)
运行后输出结果和预期完全一致:
a b flag 1 1 4 0 2 2 5 1 3 3 6 0
该实现不需要额外存储全量匹配矩阵,且匹配成功后提前终止内层循环,是for循环方案下的最优写法。
内容的提问来源于stack exchange,提问作者adl
相关产品推荐
相关产品推荐

