R语言解决国家名称命名不匹配问题实现ggplot世界地图正确着色
国家名匹配问题解决方案
你提到的countrycode包完全可以解决这个问题,它内置了全球各国的多种命名规范、别名、官方编码的映射关系,不需要自行收集国家别名数据。核心思路是将所有数据源的国家名称统一转换为唯一标准化编码(如ISO 3位编码iso3c)后再做匹配,完全避开不同数据源国家名写法不统一的问题。
修正后的可运行代码
library(ggplot2) library(countrycode) library(dplyr) # 加载世界地图数据 worldmap_AMIS_Market <- map_data("world") # 目标国家向量 vec_AMIS_Market <- c("Canada", "China","United States of America", "Republic of Korea", "Russian Federation") # 1. 给地图数据新增标准iso3编码列,自动识别各种国家名写法 worldmap_AMIS_Market <- worldmap_AMIS_Market %>% mutate( iso3 = countrycode(region, origin = "country.name", destination = "iso3c", warn = FALSE) ) # 2. 把目标国家向量也转成iso3编码 target_iso3 <- countrycode(vec_AMIS_Market, origin = "country.name", destination = "iso3c") # 3. 用标准编码匹配设置填充色 worldmap_AMIS_Market <- worldmap_AMIS_Market %>% mutate(fill = ifelse(iso3 %in% target_iso3, "green", "lightgrey")) # 绘图 ggplot(worldmap_AMIS_Market, aes(long, lat, fill = fill, group=group)) + geom_polygon(colour="gray") + ggtitle("Availability of AMIS Supply and Demand Data - Monthly") + scale_fill_identity()
方案说明
countrycode的origin = "country.name"参数支持自动识别绝大多数主流国家名写法:包括缩写(如USA、UK)、全称(如United States of America)、不同译名、常用别名,无需手动处理映射。- 后续处理50份不同数据集时,只需要把所有数据集的国家字段都转换为同一种标准编码(如
iso3c),用编码做关联匹配即可,无需逐一修正国家名写法。 - 如果遇到极个别偏门别名无法识别的情况,可以通过
custom_match参数传入自定义的小字典补全匹配规则。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

