R语言两个DataFrame列匹配:为df2新增来自df1的映射得分列
R语言数据框匹配合并实现方案
现有数据
df2数据结构
structure(list(id = c(1, 1, 2, 2, 2, 3, 3, 3), code2 = c("24600", "2400", "718", "19C11", "2021", "41C200", "G8511", "2021")), class = "data.frame", row.names = c(NA, -8L))
df1数据结构
structure(list(code = c("718", "E0012", "G8511", "209BF", "466D", "2021"), score = c(1, 1, 3, 6, 1, 2)), class = "data.frame", row.names = c(NA, -6L))
需求
将df2的code2列与df1的code列进行匹配,匹配成功时将df1对应行的score值赋值给df2新增的score2列,无匹配的位置赋值为NA。
实现方法
方法1:基础R实现(无需加载第三方包)
直接使用match函数完成匹配赋值:
df2$score2 <- df1$score[match(df2$code2, df1$code)]
方法2:dplyr包实现
使用左连接逻辑完成合并,再重命名列即可:
library(dplyr) df2 <- df2 %>% left_join(df1, by = c("code2" = "code")) %>% rename(score2 = score)
最终输出结果
处理后的df2结构如下:
structure(list(id = c(1, 1, 2, 2, 2, 3, 3, 3), code2 = c("24600", "2400", "718", "19C11", "2021", "41C200", "G8511", "2021"), score2 = c(NA, NA, 1, NA, 2, NA, 3, 2)), class = "data.frame", row.names = c(NA, -8L))
内容的提问来源于stack exchange,提问作者kam
相关产品推荐
相关产品推荐

