R使用left_join按country列合并数据集时subregion列全返回NA
问题原因
两个数据集用于关联的country列字符串格式不一致,导致精确匹配失败:
- 从
dput输出可以看到,Tomig_sixty中的国家名无前导空格,例如阿尔及利亚对应值为"Algeria" subregion数据集中的所有国家名开头都多了1个前导空格,对应值为" Algeria"
R的连接操作默认对连接键做完全精确匹配,带空格和不带空格的字符串会被判定为不同值,因此左连接时找不到匹配的记录,新增的subregion列全部返回NA。
修复方案
先清理subregion数据集country列的前后多余空白字符,再执行连接操作即可正常匹配:
library(dplyr) # 清理国家名列的前后空白 subregion_clean <- subregion %>% mutate(country = trimws(country, which = "both")) # 执行连接 newdataset <- Tomig_sixty %>% left_join(subregion_clean, by = "country")
如果需要同时清理字符串中间的多余空格、换行符等异常字符,可以替换为stringr包的str_squish()函数做标准化处理:
library(dplyr) library(stringr) subregion_clean <- subregion %>% mutate(country = str_squish(country))
清理后重新连接,Algeria等国家就会正确匹配到对应的subregion值,不会再出现全NA的问题。
内容的提问来源于stack exchange,提问作者Jhau16
相关产品推荐
相关产品推荐

