当dataframe A与B的指定字段值匹配时,如何将B的数据赋值到A的列?
最优实现方案
你要的效果本质是按Email字段对两个数据表做左连接,以下是两种常用的落地方式:
方案1:dplyr包实现(最推荐,代码可读性高、适配复杂场景)
# 加载依赖包 library(dplyr) # 执行匹配 A <- A %>% left_join( # 仅保留B表需要用到的两个字段,避免多余字段混入A表 B %>% select(Email, Category), by = "Email" )
如果B表存在同一个Email对应多个不同Category的情况,可先对B表去重再匹配:
A <- A %>% left_join( B %>% distinct(Email, .keep_all = TRUE) %>% select(Email, Category), by = "Email" )
方案2:基R实现(无需安装任何第三方包)
A <- merge( x = A, y = B[, c("Email", "Category")], by = "Email", all.x = TRUE # 保留A表所有行,未匹配到的Category自动填充NA )
注意事项
- 两种方案均不会修改A表原有行顺序、原有列的内容,输出结果和你给出的预期完全一致
- 匹配前建议先确认B表的Email字段无重复值,避免匹配后出现多余的重复行
内容的提问来源于stack exchange,提问作者thpoole
相关产品推荐
相关产品推荐

