R语言中如何用另一个数据框的值更新数据框指定列
R数据框按主键匹配更新实现方案
最优方案:dplyr::rows_update
该函数是dplyr 1.0.0及以上版本专门为「匹配主键、更新对应列」场景设计的原生功能,代码简洁易读,无需手动处理匹配逻辑:
# 加载dplyr包,若未安装先运行 install.packages("dplyr") library(dplyr) # 按St_Name匹配,用df2的值更新df1的对应列 df1 <- rows_update(df1, df2, by = "St_Name")
运行后直接得到预期结果,仅匹配到的KS行的I1、I3列会被覆盖,其余行和列完全保持不变。
无额外依赖的Base R方案
如果不想加载第三方包,可以用基础匹配逻辑实现:
# 找到df2的行在df1中对应的位置 match_pos <- match(df2$St_Name, df1$St_Name) # 提取两个数据框都存在、且需要更新的非主键列 update_cols <- setdiff(intersect(names(df1), names(df2)), "St_Name") # 批量赋值更新 df1[match_pos, update_cols] <- df2[, update_cols]
这个方案兼容性更强,无需安装任何包即可运行。
内容的提问来源于stack exchange,提问作者Tom J
相关产品推荐
相关产品推荐

