如何合并更新两个列名相同的R数据框,实现原有列值的补全更新
解决方案
最简洁的方案是直接使用dplyr内置的rows_patch()函数,这是官方专门为「用新表数据补全原表缺失值」场景设计的功能,无需手动处理多列合并逻辑,一行代码即可完成操作:
library(dplyr) # 直接补全原表的email列缺失值 email_df_updated <- email_df %>% rows_patch(new_infomation, by = "id")
运行后直接输出你需要的10行2列结果:原表中非缺失的邮箱值不会被修改,匹配到ID的NA值会自动被新表的邮箱填充,全程不会生成多余的中间列。
如果你使用的dplyr版本低于1.0.0,没有内置rows_patch()函数,可以用coalesce()简化你原来的写法,比ifelse()逻辑更简洁、可读性更高:
email_df_updated <- left_join(email_df, new_infomation, by = "id") %>% mutate(email = coalesce(email.x, email.y)) %>% select(id, email)
coalesce()函数会按参数顺序返回第一个非NA的值,自动用新表的email.y补全原表email.x的缺失。
内容的提问来源于stack exchange,提问作者ryoto
相关产品推荐
相关产品推荐

