You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:55:10