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

如何在R中匹配两个数据集的德国NUTS-3级行政区名称?

匹配德国NUTS-3级行政区的可靠方法

针对名称不匹配导致的连接失效问题,最可靠的解决方案是依赖唯一编码而非名称匹配,以下是具体实现路径:

1. 优先使用NUTS编码匹配

giscoR获取的Eurostat shapefile必然包含NUTS_ID字段(格式如DE111,是欧盟统一的NUTS-3级唯一编码),这是最稳定的匹配键。

  • 如果你的PM2.5数据集(df_2021)没有NUTS_ID,可以通过权威映射表给kreis列补充编码:
    • 整理一份德国NUTS-3名称与NUTS_ID的对应表(可从Eurostat官方NUTS目录或德国联邦统计局资料提取)
    • 用这份映射表给df_2021添加NUTS_ID列,之后直接通过NUTS_ID执行left_join()

2. 德国本地行政区编码(AGS)匹配

德国的**Amtlicher Gemeindeschlüssel(AGS,官方行政区编码)**是更细分的本地唯一编码,NUTS-3级行政区(Kreis/Kreisfreie Stadt)通常对应一个或多个AGS的前5位编码。

  • 若任一数据集包含AGS,可通过AGS与NUTS-3的映射关系完成关联;若均无,同样可通过权威资料生成映射表后补充编码,再进行连接。

3. 名称清洗(备选方案,可靠性低于编码)

如果实在无法获取编码,可通过标准化名称来尝试匹配,但需注意仍存在小概率误差:

  • 统一后缀:移除或标准化"Kreisfreie Stadt"、"Stadtkreis"、"Kreis"这类后缀,比如全部替换为空字符串
  • 处理缩写与特殊字符:将"St."替换为"Stadt"、"Kr."替换为"Kreis",把变音符号(ä/ö/ü)转换为ae/oe/ue,统一大小写并移除多余空格、标点
  • R语言示例代码:
    library(stringr)
    # 清洗PM2.5数据集的kreis列
    df_2021$kreis_clean <- df_2021$kreis %>%
      str_to_upper() %>%
      str_remove_all("KREISFREIE STADT |STADTKREIS |KREIS ") %>%
      str_replace_all(c("Ä" = "AE", "Ö" = "OE", "Ü" = "UE", "\\." = ""))
    
    # 清洗shapefile的NUTS_NAME列
    nuts3_germany$NUTS_NAME_clean <- nuts3_germany$NUTS_NAME %>%
      str_to_upper() %>%
      str_remove_all("KREISFREIE STADT |STADTKREIS |KREIS ") %>%
      str_replace_all(c("Ä" = "AE", "Ö" = "OE", "Ü" = "UE", "\\." = ""))
    
    # 使用清洗后的列执行连接
    left_join(df_2021, nuts3_germany, by = c("kreis_clean" = "NUTS_NAME_clean"))
    

内容的提问来源于stack exchange,提问作者Saïd Maanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:50:10