如何基于ID/因子水平为行结构不同的重复ID数据框赋值?
解决方案
你提到的场景完全可以用merge()或者其他匹配方法实现,以下是几种可行的方案:
1. Base R 原生 merge() 方法
merge() 支持保留左表(df2)的所有行,即使存在重复id,也会自动将df1中的对应值重复填充:
# 按id匹配,保留df2的所有行 df2_merged <- merge(df2, df1, by = "id", all.x = TRUE)
2. dplyr 包的 left_join() 方法
如果习惯使用tidyverse风格,left_join() 更简洁直观:
library(dplyr) df2_joined <- df2 %>% left_join(df1, by = "id")
3. Base R 手动匹配赋值
用match()函数直接定位id的位置,手动添加列:
# 给df2添加sex列 df2$sex <- df1$sex[match(df2$id, df1$id)] # 给df2添加age列 df2$age <- df1$age[match(df2$id, df1$id)]
以上三种方法处理后,df2中重复的id都会对应df1里的sex和age值,比如id为b的两行都会得到sex=F、age=51,完全符合你的需求。
内容的提问来源于stack exchange,提问作者PhelsumaFL
相关产品推荐
相关产品推荐

