9 El paquet countrycode
Quan estudiem la política internacional, el més freqüent serà que ens trobem amb dades que provenen de fonts d’informació diferent, pel qual sovint els estats poden rebre un nom diferent, estar codificats de manera diferent i tenir sèries temporals diferents. Això suposa un problema a l’hora d’ajuntar i treballar amb grans quantitats de dades. Per sort, el paquet d’R countrycode (Arel-Bundock et al., 2018) ens resol aquest problema.
En aquesta secció replicarem els passos habituals que se segueixen per crear bases de dades que tenen per unitat d’anàlisi l’estat. Normalment, el procediment serà el següent:
- S’observen els codis de país de cada base de dades i, si divergeixen, es transforma un d’ells per tal d’equiparar-los amb els de l’altre base de dades.
- S’uneixen els marcs de dades.
- Opcionalment, canviar l’idioma dels països
Aquesta secció conté codi d’R. Qui no tingui un coneixement previ del programa, pot ignorar els codis que apareixen més avall i llegir simplement el text. Qui ja tingui un coneixement previ d’R, pot intentar replicar els exemples que figuren a continuació. Per fer-ho, necessitarà tenir carregats els següents paquets:
9.1 Transformar codis de país
Podem veure les funcionalitats de countrycode amb un senzill exemple. A continuació tenim dos marcs de dades (Taula 9.1 i Taula 9.2), amb dades de tres països: França, Alemanya i República Txeca. No obstant, a cada marc de dades hi apareix informació diferent. El primer marc de dades conté informació del PIB per càpita (gdpcap) i la població (pop). A més, té una columna amb el codis de país, codificats segons el sistema iso2c.
En el segon marc de dades tenim informació de la llengua oficial d’aquests països. Observem que els noms de país són diferents en el primer i segon marc de dades. I que el segon marc està codificat amb el sistema cowc.
| country | cowc | lang |
|---|---|---|
| French Republic | FRN | French |
| Federal Republic of Germany | GMY | German |
| Czech Republic | CZR | Czech |
Imaginem-nos que, enlloc de tres països, tenim un marc de dades de 190 països. Com que no hi ha cap manera òbvia d’ajuntar els dos marcs de dades, el primer que pensaríem és que haurem de fer la unió de les dades de forma manual.
Com que tenim poques observacions, podríem ajuntar-los manualment amb programes com Excel. Però l’habitual serà treballar amb grans quantitats de dades. Si, per exemple, tinguéssim dades de 150 estats durant 50 anys, el nombre d’observacions seria: 150 * 50 = 7.500 casos. Ajuntar les dades de forma manual portaria moltes hores de feina. Per tant, és necessari disposar d’una forma automàtica que ens permeti fer aquesta operació.
Una millor alternativa és utilitzar el paquet d’R countrycode, que conté informació de totes les equivalències entre sistemes de classificació d’estats. El primer que hem de fer és crear una nova columna en el primer marc de dades que contingui els codis de país del segon marc de dades. A la funció countrycode() haurem d’indicar tres arguments, separats per comes:
- Com a primer argument indicarem on es troba el codi que volem transformar (
df1$code). - Com a segon argument indicarem quin és el sistema de classificació d’aquest codi (
"iso2c"). - Com a tercer argument indicarem sistema del codi al què transformarem les dades (
"cowc").
countrycode(variable d'origen,
codi d'origen,
codi de destí)
La llista dels diferents sistemes de classificació es pot consultar teclejant ?codelist.
Si transformem la variable d’origen code, que conté el sistema iso2c, al sistema cowc, obtindrem com a resultat el marc de dades Taula 9.3, que veiem a continuació. Com observem, amb un senzill codi hem creat una nova columna que conté el codi de país cowc.
| country | code | gdpcap | cowc |
|---|---|---|---|
| France | FR | 43518 | FRN |
| Germany | GE | 50801 | GRG |
| Czechia | CZ | 26378 | CZR |
df1$cowc <- countrycode(df1$code, "iso2c", "cowc")9.2 Unir marcs de dades
Un cop tenim un codi de país comú que als dos marcs de dades, podem unir-los amb una de les funcions join del paquet dplyr. En aquestes funcions:
- En el primer argument indiquem el nom del primer marc de dades (
df1). - En el segon argument indiquem el nom del segon marc de dades (
df2). - I en el tercer argument indiquem la columna per la qual volem unir els marcs de dades (
"cowc").
9.3 Canviar l’idioma
Opcionalment, també podem canviar els noms a un idioma diferent de l’anglès. Els noms estan continguts en diferents vectors del marc de dades codelist, que és un dels objectes que conté el paquet countrycode. Per exemple, si consultem el vector cldr.name.ca veurem la llista de tots els noms de país en català.
CLDR respon al nom de Common Locale Data Repository, un repositori que registra termes amb centenars d’idiomes diferents.
Per canviar els noms, hem de fer una operació molt semblant a la que hem fet a la Taula 9.3. A dins de la funció countrycode(), en el primer argument indiquem la columna on es troba nom del codi de país que prendrem com a referència, en el següent argument especifiquem el sistema del codi en qüestió i en el tercer argument indicarem l’idioma al que ho volem transformar. També hem aprofitat per netejar el marc de dades i eliminar les columnes amb els noms de països en anglès.
codelist[,"cldr.name.ca"]# A tibble: 288 × 1
cldr.name.ca
<chr>
1 Afganistan
2 Illes Åland
3 Albània
4 Algèria
5 Samoa Nord-americana
6 Andorra
7 Angola
8 Anguilla
9 Antàrtida
10 Antigua i Barbuda
# ℹ 278 more rows
| pais | code | cowc | gdpcap | pop | lang |
|---|---|---|---|---|---|
| França | FR | FRN | 43518 | 67 | French |
| Alemanya | DE | GMY | 50801 | 83 | German |
| Txèquia | CZ | CZR | 26378 | 11 | Czech |
df$pais <- countrycode(df$code, "iso2c", "cldr.name.ca")
df[,c("pais", "code", "cowc", "gdpcap", "pop", "lang")]