R中用left_join实现VLOOKUP时如何避免ID列重复且保留该列
问题原因
你出现ID列重复的核心原因是lookup查找表的Language列存在大量重复记录,比如en对应的映射行在lookup中重复出现了12次。左连接left_join的逻辑是只要匹配键相等就会生成对应的关联行,因此原df中每一行Language为en的记录都会关联出12行结果,最终表行数膨胀、出现ID重复的问题,和ID列本身的逻辑无关。
解决方案
先对lookup表做去重处理,保留每个Language对应的唯一LanguageClean映射,再进行左连接即可,代码如下:
library(dplyr) # 对lookup表去重,保留Language和LanguageClean的唯一映射关系 lookup_dedup <- lookup %>% distinct(Language, LanguageClean) # 执行左连接,最终结果行数和原df完全一致,保留ID列 df_result <- left_join(df, lookup_dedup, by = "Language")
补充说明
运行上述代码后,你会得到10行的结果表,完全保留原df的所有列,无匹配的空Language值对应LanguageClean为NA,符合你的需求。如果后续遇到同类左连接行膨胀的问题,优先检查关联键在右表是否存在重复即可。
内容的提问来源于stack exchange,提问作者aspark2020
相关产品推荐
相关产品推荐

