如何用df_new更新df_old同名列值并保留非共享列数据
用df_new更新df_old同名列并保留非共享列的R实现
针对需求——保留df_old的非共享列原值,用df_new更新两者共有的列,同时适配大量列的场景,可以用以下简单高效的方法实现:
示例数据
先还原你的示例数据:
# 构建旧数据框 avg_sleep <- c(21, 18, 17, 10) rating <- 1:4 other <- 5:8 df_old <- data.frame(rating, avg_sleep, other) # 构建新数据框 avg_sleep <- c(16,15,18,19) rating <- 2:5 df_new <- data.frame(rating, avg_sleep)
解决方案(Base R)
这种方法无需手动指定列名,自动适配任意数量的共享列:
# 提取两个数据框的共享列名 shared_columns <- intersect(names(df_old), names(df_new)) # 用df_new的共享列值覆盖df_old的对应列 df_old[shared_columns] <- df_new[shared_columns]
执行后查看df_old的结果:
rating avg_sleep other 1 2 16 5 2 3 15 6 3 4 18 7 4 5 19 8
方法说明
intersect(names(df_old), names(df_new)):自动找出两个数据框的共同列名,不管有多少列都能精准匹配,避免手动输入的繁琐和错误df_old[shared_columns] <- df_new[shared_columns]:直接对df_old的共享列进行赋值,非共享列(如示例中的other)会完全保留原有值
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

