La plupart des cartes du monde standard de R sont en anglais. L’autre jour, des étudiants souhaitaient visualiser des données tirées d’une base où les noms des pays sont en anglais. Pour obtenir une correspondance entre des noms anglais et des noms français, on peut utiliser la base suivante
> library(gdata) > library(xlsx) > download.file("http://www.stat.gouv.qc.ca/statistiques/divisions-territoriales/pays-liste-isq-web.xls","corresp") > xls_corresp <- read.xls("corresp",sheet=1,encoding="latin1")
On a ici
> df_corresp <- data.frame( + FR=xls_corresp$X.5, + EN=xls_corresp$X.11) > df_corresp[5:10,] FR EN 5 Belgique-Luxembourg Belgium-Luxembourg 6 Îles du Pacifique Pacific Islands 7 Afghanistan Afghanistan 8 Afrique du Sud South Africa 9 Îles Åland Åland Islands 10 Albanie Albania
Pour avoir une correspondance, entre les noms sous R, et ceux dans la base à notre disposition, il faut manipuler un peu les chaînes de caractères,
> df_corresp$FR = as.character(df_corresp$FR) > df_corresp$FR = iconv(df_corresp$FR, to="ASCII//TRANSLIT") > df_corresp$FR = tolower(df_corresp$FR) > remove_minus = function(s) paste(unlist(strsplit(s, split='-',fixed=TRUE)),collapse="") > remove_space = function(s) paste(unlist(strsplit(s, split=' ',fixed=TRUE)),collapse="") > df_corresp$FR = sapply(df_corresp$FR,remove_minus) > df_corresp$FR = sapply(df_corresp$FR,remove_space) > df_corresp$EN = as.character(df_corresp$EN) > df_corresp$EN = iconv(df_corresp$EN, to="ASCII//TRANSLIT") > df_corresp$EN = tolower(df_corresp$EN) > df_corresp$EN = sapply(df_corresp$EN,remove_minus) > df_corresp$EN = sapply(df_corresp$EN,remove_space) > split_dots = function(s) strsplit(s, split=':',fixed=TRUE)[[1]][1]
Si on regarde les pays que l’on a pu convertir le nom en anglais pour avoir une correspondance avec le nom du pays dans la base de R,
> library(maps) > world<-map(database="world") > world$pays_EN <- world$names > world$pays_EN <- tolower(world$pays_EN) > world$pays_EN = sapply(world$pays_EN,remove_space) > world$pays_EN = sapply(world$pays_EN,remove_minus) > world$pays_EN = sapply(world$pays_EN,split_dots) > world$pays_FR <- df_corresp$FR[match(world$pays_EN, df_corresp$EN)]
on obtient le graphique suivant
Les seuls pays pour lesquels on n’a pas de correspondance sont les États-Unis d’Amérique (usa dans la base de R), la Russie (ussr), les Congos (avec la République Démocratique et l’autre), et la Côte d’Ivoire. En bricolant un peu sur ces 4 pays, on pourra avoir une correspondance entre les noms utilisés sous R, et les noms en français.