R语言使用for循环结合left join新增变量时数据被覆盖如何解决
R for循环批量left join结果覆盖问题修复
问题根因
原有代码每次循环都基于原始data执行left join并直接赋值给result,上一轮的join结果会被新循环的输出直接覆盖,无法累积多轮匹配生成的字段。
修复后代码
library(dplyr) # 初始化结果为原始数据集,后续循环基于该基础追加字段 result <- data pykey = c("prevKeyIdOrg", "prevKeyIdOrg2") key = "KeyIdOrg" colNames = c("ym", "hd_001", "prevKeyIdOrg", "KeyIdOrg", "prevKeyIdOrg2") for (i in 1:length(pykey)){ pyData = data[!is.na(data[, key]), c(key, colNames)] %>% distinct(.) j = pykey[i] names(pyData) = paste0(strrep("p", i), names(pyData)) names(pyData)[names(pyData) == paste0(strrep("p", i), key)] = j print(names(pyData)) pyData = pyData[!is.na(pyData[, j]), ] %>% distinct(.) # 核心改动:使用上一轮迭代完成的result做join,而非原始data result = result %>% left_join(., pyData, by = j) %>% distinct(.) }
改动说明
- 循环开始前先将
result初始化为原始data,作为多轮join的累积基底 - 每轮循环的join操作都基于上一轮已经追加过匹配字段的
result执行,新匹配到的字段会直接追加到现有结果中,不会覆盖之前的匹配输出
内容的提问来源于stack exchange,提问作者Luiy_coder
相关产品推荐
相关产品推荐

