从国家名称中获取大陆名称在R中的实现方法

19

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

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

有没有可以用来附加一个包含大陆名称的数据列的软件包,而不需要原始数据?

3个回答

35
你可以使用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>

7

在 Markus 的回答中,countrycode 是根据 codelist 中的“continent”声明绘制的。

?codelist

大陆 的定义:

大陆:根据世界银行发展指标所定义的大陆

问题要求的是大陆,但有时候大陆不能提供足够的组别来划分数据。例如,大陆 将北美洲和南美洲分为一个 美洲 组。

你可能需要的是 地区

地区:根据世界银行发展指标所定义的地区

目前不清楚世界银行如何分组地区,但下面的代码显示这个目的更加精细。

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      

2

您可以尝试

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个值? - Zombraz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接