我有一个数据框,其中一列代表国家名称。 我的目标是添加另一列,提供大陆信息。 请参考以下用例:
my.df <- data.frame(country = c("Afghanistan","Algeria"))
有没有可以用来附加一个包含大陆名称的数据列的软件包,而不需要原始数据?
我有一个数据框,其中一列代表国家名称。 我的目标是添加另一列,提供大陆信息。 请参考以下用例:
my.df <- data.frame(country = c("Afghanistan","Algeria"))
有没有可以用来附加一个包含大陆名称的数据列的软件包,而不需要原始数据?
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>
在 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
您可以尝试
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
的数值可能需要调整;我不确定,因为您没有提供所有的数值。