【问题标题】:Get continent name from country name in R从R中的国家名称获取大陆名称
【发布时间】:2017-11-27 11:40:38
【问题描述】:

我有一个数据框,其中一列代表国家/地区名称。我的目标是再添加一列提供大陆信息。请检查以下用例:

my.df <- data.frame(country = c("Afghanistan","Algeria"))

是否有一个包可用于在不包含原始数据的情况下附加包含大陆名称的数据列?

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用countrycode 包来完成此任务。

    library(countrycode)
    df <- data.frame(country = c("Afghanistan",
                                 "Algeria",
                                 "USA",
                                 "France",
                                 "New Zealand",
                                 "Fantasyland"))
    
    df$continent <- countrycode(sourcevar = df[, "country"],
                                origin = "country.name",
                                destination = "continent")
    #warning
    #In countrycode(sourcevar = df[, "country"], origin = "country.name",  :
    #  Some values were not matched unambiguously: Fantasyland
    

    结果

    df
    #      country continent
    #1 Afghanistan      Asia
    #2     Algeria    Africa
    #3         USA  Americas
    #4      France    Europe
    #5 New Zealand   Oceania
    #6 Fantasyland      <NA>
    

    【讨论】:

      【解决方案2】:

      扩展 Markus 的答案,countrycode 借鉴了 codelists 的“大陆”声明。

      ?codelist
      

      continent的定义:

      大陆:世界银行发展指标中定义的大陆

      该问题针对大洲提出,但有时大洲没有提供足够的组供您描绘数据。例如,continents 将北美和南美分组为Americas

      你可能想要的是region:

      区域:世界银行发展指标中定义的区域

      目前尚不清楚世界银行如何对区域进行分组,但以下代码显示了该目的地如何更加细化。

      library(countrycode)
      
      egnations <- c("Afghanistan","Algeria","USA","France","New Zealand","Fantasyland")
      
      countrycode(sourcevar = egnations, origin = "country.name",destination = "region")
      

      输出:

      [1] "Southern Asia"            
      [2] "Northern Africa"          
      [3] "Northern America"         
      [4] "Western Europe"           
      [5] "Australia and New Zealand"
      [6] NA      
      

      【讨论】:

        【解决方案3】:

        你可以试试

        my.df <- data.frame(country = c("Afghanistan","Algeria"),
                            continent= as.factor(c("Asia","Africa")))
        merge(my.df, raster::ccodes()[,c("NAME", "CONTINENT")], by.x="country", by.y="NAME", all.x=T)
        #       country continent CONTINENT
        # 1 Afghanistan      Asia      Asia
        # 2     Algeria    Africa    Africa
        

        一些country 值可能需要调整;我不知道,因为您没有提供所有值。

        【讨论】:

        • 如果我们有超过 100 个值,有没有办法在不指定国家/地区的值的情况下做到这一点?
        猜你喜欢
        • 2019-09-18
        • 1970-01-01
        • 1970-01-01
        • 2016-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        相关资源
        最近更新 更多