在R语言中如何将国家名称/iso3c码转换为经纬度?
为带ISO3C码的数据集添加经纬度列的方法
以下是几种可靠的实现方式,适合后续用highcharter制作交互式地图:
方法1:用rnaturalearth获取官方国家中心点坐标
这个包提供权威的地理空间数据,匹配ISO3C码更准确:
- 安装并加载依赖包:
install.packages("rnaturalearth") library(rnaturalearth) library(dplyr) - 获取包含ISO3C和中心点经纬度的数据集:
# 获取国家地理数据,提取ISO3C和中心点坐标 world_centroids <- ne_countries(returnclass = "sf") %>% select(iso_a3, longitude, latitude) - 与你的数据集合并(假设你的数据集名为
my_df,ISO3C列名为iso3c):my_df <- my_df %>% left_join(world_centroids, by = c("iso3c" = "iso_a3"))
方法2:用countrycode包快速匹配(最简单)
countrycode内置了ISO3C与经纬度的映射关系,无需额外地理数据:
- 安装并加载包:
install.packages("countrycode") library(countrycode) - 直接添加经纬度列:
# 通过ISO3C码匹配经度 my_df$longitude <- countrycode(my_df$iso3c, origin = "iso3c", destination = "longitude") # 通过ISO3C码匹配纬度 my_df$latitude <- countrycode(my_df$iso3c, origin = "iso3c", destination = "latitude")
补充:解决maps包的使用问题
如果一定要用maps包,需要先聚合多边形坐标得到国家中心点,还要处理名称匹配问题:
install.packages("maps") library(maps) library(dplyr) # 获取世界地图多边形数据,计算每个国家的中心点 map_centroids <- map_data("world") %>% group_by(region) %>% summarise(longitude = mean(long), latitude = mean(lat)) # 统一国家名称(避免匹配失败) my_df$region <- countrycode(my_df$country_name, origin = "country.name", destination = "country.name.en") # 合并数据集 my_df <- my_df %>% left_join(map_centroids, by = "region")
注意:如果合并后出现NA值,检查你的ISO3C码是否符合标准(比如是否有拼写错误、特殊地区编码),修正后重新匹配即可。
内容的提问来源于stack exchange,提问作者rai
相关产品推荐
相关产品推荐

