• R语言countrycode包转换国家名字和代码



    本文首发于公众号:医学和生信笔记,完美观看体验请至公众号查看本文。


    不同的数据源使用不同的编码方案来表示国家(例如CoW或ISO)。这带来了两个主要问题:(1)其中一些编码方案不够直观,(2)合并这些数据需要从一个编码方案转换到另一个编码方案,或者从较长的国家名称转换到一个编码方案。

    countrycode包可以转换40多个不同的国家编码方案,以及转换600多个不同语言和格式的国家名称。

    也许很多国家代码你都没听过,但保不准你以后就需要了呢?所以这个包还是非常实用的,没有花里胡哨的功能,就是转换,值得收藏!

    安装

    # 2选1
    install.packages("countrycode")
    
    remotes::install_github('vincentarelbundock/countrycode')
    
    • 1
    • 2
    • 3
    • 4

    支持的国家代码

    library(countrycode)
    
    • 1

    可以通过运行?codelist查看支持哪些国家编码方式。

    countrycode

    可以转换单个或一组国家名称或编码。

    # ISO to Correlates of War
    countrycode('DZA', origin = 'iso3c', destination = 'cown') 
    ## [1] 615
    
    # English to ISO
    countrycode('China', origin = 'country.name', destination = 'iso3c') 
    ## [1] "CHN"
    
    # 德语 to 阿拉伯语
    countrycode(c('Algerien', 'Albanien'), origin = 'country.name.de', destination = 'un.name.ar') 
    ## [1] "" ""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    转换多个也是一样的用法:

    cowcodes <- c("ALG", "ALB", "UKG", "CAN", "USA")
    countrycode(cowcodes, origin = "cowc", destination = "iso3c")
    ## [1] "DZA" "ALB" "GBR" "CAN" "USA"
    
    • 1
    • 2
    • 3

    添加国旗

    还可以把国家名字转换成国旗!但是这个功能经常出问题,因为国旗和设备的编码问题,能不能用看缘分。。比如我就不能用。

    library(gt)
    library(countrycode)
    
    Countries <- c('Canada', 'Germany', 'Thailand', 'Algeria', 'Eritrea')
    Flags <- countrycode(Countries, 'country.name', 'unicode.symbol')
    dat <- data.frame(Countries, Flags)
    gt(dat)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Snipaste_2022-04-24_20-10-39

    不同语言和格式的国家名称转换

    很多国家有多种不同的叫法,比如England,Britain,America,the united states of America等,都是可以转换的,不过也有一些不能。

    由于编码原因,R里面很多语言显示不出来!

    countrycode('United States of America', origin = 'country.name', destination = 'cldr.name.en')
    ## [1] "United States"
    
    countrycode('United States of America', origin = 'country.name', destination = 'cldr.short.en')
    ## [1] "US"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查看支持哪些国家名称及别名等:

    head(cldr_examples)
    
               Code                    Example
    1    cldr.name.af   Franse Suidelike Gebiede
    2   cldr.name.agq                         TF
    3    cldr.name.ak                         TF
    4    cldr.name.am           የፈረንሳይ ደቡባዊ ግዛቶች
    5    cldr.name.ar الأقاليم الجنوبية الفرنسية
    6 cldr.name.ar_ly الأقاليم الجنوبية الفرنسية
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    自定义转换数据框

    countrycode通过custum_dict参数接受用户提供的字典。这些字典将覆盖内置的国家代码字典。例如,以下是一个用于处理美国州名的正则表达式和缩写的字典。

    library(countrycode)
    url = "https://raw.githubusercontent.com/vincentarelbundock/countrycode/master/data/custom_dictionaries/us_states.csv"
    state_dict = read.csv(url, stringsAsFactors=FALSE)
    head(state_dict)
    ##        state abbreviation    state.regex
    ## 1    Alabama           AL    .*alabama.*
    ## 2     Alaska           AK     .*alaska.*
    ## 3    Arizona           AZ    .*arizona.*
    ## 4   Arkansas           AR   .*arkansas.*
    ## 5 California           CA .*california.*
    ## 6   Colorado           CO   .*colorado.*
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    countrycode('State of Alabama', 
                origin = 'state', 
                destination = 'abbreviation', 
                custom_dict = state_dict,
                origin_regex = TRUE)
    ## [1] "AL"
    
    countrycode(c('MI', 'OH', 'Bad'), 'abbreviation', 'state', custom_dict=state_dict)
    ## [1] "Michigan" "Ohio"     NA
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ISOcodes包提供了额外的国家编码,包括ISO15924,ISO639,ISO8859,也可以通过custom_dict参数使用。

    # install.packages("ISOcodes")
    countrycode('abk', 'Alpha_3_B', 'Name', custom_dict = ISOcodes::ISO_639_2)
    ## [1] "Abkhazian"
    
    • 1
    • 2
    • 3

    countryname

    这个函数主要用于把任何语言间的国家名字进行转换,相当于一个字典了。

    不支持中文!

    x <- c('ジンバブエ', 'Afeganistãu',  'Barbadas', 'Sverige', 'UK', '中国')
    
    countryname(x)
    ## [1] "Zimbabwe" NA         "Barbados" "Sweden"   "UK"       NA
    
    • 1
    • 2
    • 3
    • 4

    本文首发于公众号:医学和生信笔记,完美观看体验请至公众号查看本文。


  • 相关阅读:
    LeetCode 每日一题 2023/11/13-2023/11/19
    C++ Reference: Standard C++ Library reference: C Library: cwchar: fputws
    STM32定时器深入学习
    如何选择一个好的简历模板
    java-net-php-python-jsp校园美食点评系统计算机毕业设计程序
    iptables防火墙
    超详细的格式化输出(format的基本玩法)
    java特种兵读书笔记(3-5)——java程序员的OS之OOM
    线路中故障电弧产生了应该如何治理?-安科瑞黄安南
    msql检索包含中文的记录
  • 原文地址:https://blog.csdn.net/Ayue0616/article/details/127804510