You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:按id和year匹配,用df_replace替换master多列值

解决方案

方法1:用dplyr包的rows_update(推荐,代码简洁直观)

rows_update是dplyr专门用于按主键匹配更新数据框的函数,无需指定具体列,只需通过id和year双主键匹配,就能用df_replace的内容覆盖master对应行:

library(dplyr)

master <- master %>%
  rows_update(df_replace, by = c("id", "year"))

说明:

  • by = c("id", "year") 指定匹配的主键,确保只有同时匹配ID和年份的行才会被更新
  • 该函数会自动替换匹配行的所有列,不用手动列出数十列
  • 如果df_replace包含master中没有的行,默认会报错,若允许忽略这类行,可添加参数conflict = "ignore"

方法2:Base R实现(无需额外包)

通过拼接id和year生成唯一标识,找到匹配行的索引后直接替换:

# 生成id+year的唯一字符串用于匹配
master_key <- paste(master$id, master$year)
replace_key <- paste(df_replace$id, df_replace$year)

# 获取master中与df_replace匹配的行索引
match_pos <- match(master_key, replace_key)

# 替换匹配到的行
master[!is.na(match_pos), ] <- df_replace[match_pos[!is.na(match_pos)], ]

效果验证:
运行后你的master数据框会被更新为:

idyearracegenderagegrade
1002017WF1711
1002018WF1812
1152020BM1509
1152021BM1610

内容的提问来源于stack exchange,提问作者helpneeder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:47:05