Get continent name from country name in R

You can use the countrycode package for this task.

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

Result

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

Expanding on Markus' answer, countrycode draws on codelists 'continent' declaration.

?codelist

Definition of continent:

continent: Continent as defined in the World Bank Development Indicators

The question asked for continents but sometimes continents don't provide enough groups for you to delineate the data. For example, continents groups North and South America into Americas.

What you might want is region:

region: Regions as defined in the World Bank Development Indicators

It is unclear how the World Bank groups regions but the below code shows how this destination is more granular.

library(countrycode)

egnations <- c("Afghanistan","Algeria","USA","France","New Zealand","Fantasyland")

countrycode(sourcevar = egnations, origin = "country.name",destination = "region")

Output:

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

Tags:

R