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数据框会被更新为:
| id | year | race | gender | age | grade |
|---|---|---|---|---|---|
| 100 | 2017 | W | F | 17 | 11 |
| 100 | 2018 | W | F | 18 | 12 |
| 115 | 2020 | B | M | 15 | 09 |
| 115 | 2021 | B | M | 16 | 10 |
内容的提问来源于stack exchange,提问作者helpneeder
相关产品推荐
相关产品推荐

