9 El paquete countrycode
Cuando estudiamos la política internacional, lo más frecuente será que nos encontremos con datos que provienen de fuentes de información diferentes, por lo cual a menudo los estados pueden recibir un nombre diferente, estar codificados de manera diferente y tener series temporales diferentes. Esto supone un problema a la hora de juntar y trabajar con grandes cantidades de datos. Por suerte, el paquete de R countrycode (Arel-Bundock et al., 2018) nos resuelve este problema.
En esta sección replicaremos los pasos habituales que se siguen para crear bases de datos que tienen por unidad de análisis al estado. Normalmente, el procedimiento será el siguiente:
- Se observan los códigos de país de cada base de datos y, si no coinciden, se transforma a uno de ellos para equipararlos con los del otro base de datos.
- Se unen los marcos de datos.
- Opcionalmente, se cambia el idioma de los países
Esta sección contiene código de R. Quien no tenga un conocimiento previo del programa, puede ignorar los códigos que aparecen a continuación y leer simplemente el texto. Quien ya tenga un conocimiento previo de R, puede intentar replicar los ejemplos que figuran a continuación. Para hacerlo, necesitará tener cargados los siguientes paquetes:
9.1 Transformar códigos de país
Podemos ver las funcionalidades de countrycode con un sencillo ejemplo. A continuación, tenemos dos marcos de datos (Tabla 9.1 y Tabla 9.2), con datos de tres países: Francia, Alemania y República Checa. No obstante, en cada marco de datos aparece información diferente. El primer marco de datos contiene información del PIB per cápita (gdpcap
) y la población (pop
). Además, tiene una columna con el códigos de país, codificados según el sistema iso2c
.
En el segundo marco de datos tenemos información de la lengua oficial de estos países. Observamos que los nombres de los países son diferentes en el primer y segundo marco de datos. Y, que el segundo marco está codificado con el sistema cowc
.
country | cowc | lang |
---|---|---|
French Republic | FRN | French |
Federal Republic of Germany | GMY | German |
Czech Republic | CZR | Czech |
Imaginémonos que, en lugar de tres países, tenemos un marco de datos de 190 países. Como no existe ninguna manera obvia de juntar los dos marcos de datos, lo primero que pensaríamos es que tendremos que realizar la unión de los datos de forma manual.
Como tenemos pocas observaciones, podríamos juntarlos manualmente con programas como Excel. Pero lo habitual será trabajar con grandes cantidades de datos. Si, por ejemplo, tuviéramos datos de 150 estados durante 50 años, el número de observaciones seria: 150 * 50 = 7.500 casos. Juntar los datos de forma manual llevaría muchas horas de trabajo. Por lo tanto, es necesario disponer de una forma automática que nos permita realizar esta operación.
Una mejor alternativa es utilizar el paquete de R countrycode, que contiene información de todas las equivalencias entre sistemas de clasificación de estados. Lo primero que tenemos que hacer es crear una nueva columna en el primer marco de datos que contenga los códigos de país del segundo marco de datos. A la función countrycode()
tendremos que indicarle tres argumentos, separados por comas:
- Como primer argumento, indicaremos dónde se encuentra el código que queremos transformar (
df1$*code
). - Como segundo argumento, indicaremos cuál es el sistema de clasificación de este código (
"iso2c"
). - Como tercer argumento, indicaremos sistema del código al que transformaremos los datos (
"cowc"
).
countrycode(variable de origen,
código de origen,
código de destino)
La lista de los diferentes sistemas de clasificación se puede consultar tecleando ?codelist
.
Si transformamos la variable de origen code
, que contiene el sistema iso2c
, al sistema cowc
, obtendremos como resultado el marco de datos Tabla 9.3, que vemos a continuación. Cómo observamos, con un sencillo código hemos creado una nueva columna que contiene el código 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 marcos de datos
Una vez tenemos un código de país común en los dos marcos de datos, podemos unirlos con una de las funciones join
del paquete dplyr
. En estas funciones:
- En el primer argumento, indicamos el nombre del primer marco de datos (
df1
). - En el segundo argumento, indicamos el nombre del segundo marco de datos (
df2
). - Y, en el tercer argumento, indicamos la columna por la cual queremos unir los marcos de datos (
"cowc"
).
9.3 Canviar el idioma
Opcionalmente, también podemos cambiar los nombres a un idioma diferente del inglés. Los nombres están contenidos en diferentes vectores del marco de datos codelist
, que es uno de los objetos que contiene el paquete countrycode
. Por ejemplo, si consultamos el vector cldr.name.es
veremos la lista de todos los nombres de país en español.
CLDR responde al nombre de Common Locale Fecha Repository, un repositorio que registra términos con centenares de idiomas diferentes.
Para cambiar los nombres, tenemos que realizar una operación muy parecida a la que hemos hecho en la Tabla 9.3. Dentro de la función countrycode()
, en el primer argumento, indicamos la columna donde se encuentra nombre del código de país que tomaremos como referencia, en el siguiente argumento, especificamos el sistema del código en cuestión y, en el tercer argumento, indicaremos el idioma al que lo queremos transformar. También hemos aprovechado para limpiar el marco de datos y eliminar las columnas con los nombres de países en inglés.
codelist[,"cldr.name.es"]
# A tibble: 288 × 1
cldr.name.es
<chr>
1 Afganistán
2 Islas Åland
3 Albania
4 Argelia
5 Samoa Americana
6 Andorra
7 Angola
8 Anguila
9 Antártida
10 Antigua y Barbuda
# ℹ 278 more rows
país | code | cowc | gdpcap | pop | lang |
---|---|---|---|---|---|
Francia | FR | FRN | 43518 | 67 | French |
Alemania | DE | GMY | 50801 | 83 | German |
Chequia | CZ | CZR | 26378 | 11 | Czech |
df$país <- countrycode(df$code, "iso2c", "cldr.name.es")
df[,c("país", "code", "cowc", "gdpcap", "pop", "lang")]