Las normas ISO y el sistema de estados

¿Cuantos estados hay en el mundo? Esta pregunta no tiene una única respuesta si observamos el recuento que realiza cada una de las diversas instituciones que intenta categorizar el sistema de estados. Estas instituciones establecen un recuento anual en base a unos criterios determinados y asignan un código a cada elemento del sistema –en nuestro caso, los estados–. Una de las instituciones que realiza esta tarea es la Organización Internacional para la Estandarización (International Organization for Standardization en inglés, conocida como ISO), una organización no gubernamental que se encarga de elaborar estándares internacionales de todo tipo. La norma ISO 3166 es la que corresponde al sistema de estados. Esta norma clasifica y codifica cada uno de los estados existentes en el sistema. Por ejemplo, España recibe dos codificaciones: según el código de caracteres (iso3c), es SPN, y según el código numérico (iso3n), es 230. Francia, en su caso, recibe las codificaciones FRN y 220. Los Estados Unidos USA y 2.

Los estados son una de las principales unidades de análisis en las bases de datos internacionales. Es por ello que cuando estamos examinando los estados en bases de datos, estaremos implícitamente utilizando categorizaciones ya establecidas, sea la ISO 3166 o bien la de alguna otra institución. Lo cierto es que no sólo existe una sola manera de clasificar los estados, sino varias. Hay otras organizaciones que elaboran sus propias nomenclaturas, como el proyecto Correlates of War (COW), Eurostat, el Banco Mundial … Por suerte, toda esta diversidad está recogida en el paquete de R countrycode, que examinaremos en esta actividad. Para ello, en primer lugar cargaremos a R este paquete junto con otros paquetes que necesitaremos para hacer los ejercicios que os proponemos.

#recordad que los paquetes tienen que estar previamente instalados 
library(countrycode)
library(haven)
library(readr)
library(dplyr)
library(tidyr)
library(ggplot2)
library(readxl)

A partir del paquete de R countrycode (Arel-Bundock, Enevoldsen, and Yetman 2018), hemos creado un diagrama de líneas en la Figura 1 que responde a la pregunta: cuántos estados hay en el mundo? Observamos como, sorprendentemente, la cantidad de estados que tienen registrados cada año varias organizaciones internacionales y grupos de investigación tengan tan poca coincidencia. Si utilizáramos, por ejemplo, una base de datos que toma como referencia la norma ISO 3166 (ver iso2c, iso3c, iso3n), nos encontraríamos que en 1940 había unos 150 estados registrados. En cambio, si tomamos como referencia Polity IV (p4c), tendríamos menos de 75.

Número de estados/año según varias bases de datos

Figure 1: Número de estados/año según varias bases de datos

OBSERVA: Tal y como se observa en la Figura 1, estas organizaciones no han tenido en cuenta el mismo número de estados a lo largo del tiempo. Sus clasificaciones varían porque han considerado elementos distintos para aceptar que es un estado y qué no lo es:

  1. ¿Por qué hay un aumento tan importante de países el 1900?
  2. ¿Por qué hay tanta diferencia entre cowc y p4c y el resto entre 1900 y 1960?
  3. ¿Por qué vdem, imf, fao o iso3n, que siguen un mismo patrón hasta 1950, siguen líneas diferentes a partir de entonces?

En esta sección exploraremos el paquete countrycode, que nos permitirá ver la importancia de estas clasificaciones cuando trabajamos con bases de datos internacionales. Para abrir el paquete en R podemos teclear countrycode:: y nos aparecerá un menú. También podemos abrir cualquier paquete yendo a Global Environment y buscándolo en el desplegable. Veremos que countrycode tiene cuatro elementos principales:

  1. El marco de datos codelist_panel
  2. La función countrycode()
  3. El objeto codelist
  4. El objeto cldr_examples

El marco de datos codelist_panel

Fijémonos primero en el marco de datos codelist_panel. Observamos que el paquete tiene 48 variables, que vemos desplegadas de forma vertical, la primera de las cuales es country.name.en. Esta variable contiene los nombres de los países, como Afghanistan. En la segunda variable (year) tenemos los años. A partir de la tercera variable vemos los diferentes tipos de codificación según cada organización o grupo de investigación internacional. Podemos consultar la mayoria de nombres de instituciones con ?codelist.

glimpse(codelist_panel)

CONSOLA: Ten en cuenta que el paquete countrycode se actualiza a menudo, por lo que los datos que aparecen en esta web pueden variar respecto a las que aparecen en tu consola. Fíjate en los de tu consola.

## Rows: 28,542
## Columns: 48
## $ country.name.en            <chr> "Afghanistan", "Afghanistan", "Afghanistan"…
## $ year                       <dbl> 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1…
## $ ar5                        <chr> "ASIA", "ASIA", "ASIA", "ASIA", "ASIA", "AS…
## $ cctld                      <chr> ".af", ".af", ".af", ".af", ".af", ".af", "…
## $ continent                  <chr> "Asia", "Asia", "Asia", "Asia", "Asia", "As…
## $ country.name.de            <chr> "Afghanistan", "Afghanistan", "Afghanistan"…
## $ country.name.de.regex      <chr> "afghan", "afghan", "afghan", "afghan", "af…
## $ country.name.en.regex      <chr> "afghan", "afghan", "afghan", "afghan", "af…
## $ cowc                       <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ cown                       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ currency                   <chr> "Afghani", "Afghani", "Afghani", "Afghani",…
## $ dhs                        <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ ecb                        <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ eu28                       <chr> "NA", "NA", "NA", "NA", "NA", "NA", "NA", "…
## $ eurocontrol_pru            <chr> "Asia", "Asia", "Asia", "Asia", "Asia", "As…
## $ eurocontrol_statfor        <chr> "Asia/Pacific", "Asia/Pacific", "Asia/Pacif…
## $ eurostat                   <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ fao                        <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ fips                       <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ gaul                       <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ genc2c                     <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ genc3c                     <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ genc3n                     <chr> "004", "004", "004", "004", "004", "004", "…
## $ gwc                        <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ gwn                        <dbl> 700, 700, 700, 700, 700, 700, 700, 700, 700…
## $ icao.region                <chr> "ASIAPAC", "ASIAPAC", "ASIAPAC", "ASIAPAC",…
## $ imf                        <dbl> 512, 512, 512, 512, 512, 512, 512, 512, 512…
## $ ioc                        <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ iso2c                      <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ iso3c                      <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ iso3n                      <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4…
## $ iso4217c                   <chr> "AFN", "AFN", "AFN", "AFN", "AFN", "AFN", "…
## $ iso4217n                   <dbl> 971, 971, 971, 971, 971, 971, 971, 971, 971…
## $ p4c                        <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ p4n                        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ region                     <chr> "South Asia", "South Asia", "South Asia", "…
## $ region23                   <chr> "Southern Asia", "Southern Asia", "Southern…
## $ un                         <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4…
## $ un.region.code             <chr> "142", "142", "142", "142", "142", "142", "…
## $ un.regionintermediate.code <chr> "NA", "NA", "NA", "NA", "NA", "NA", "NA", "…
## $ un.regionsub.code          <chr> "34", "34", "34", "34", "34", "34", "34", "…
## $ unicode.symbol             <chr> "\U0001f1e6\U0001f1eb", "\U0001f1e6\U0001f1…
## $ unpd                       <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4…
## $ vdem                       <dbl> 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,…
## $ wb                         <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ wb_api2c                   <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ wb_api3c                   <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ wvs                        <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4…

Ejercicio 1: A partir del resultado de glimpse(codelist_panel) y de observar la Figura 1, responde a las siguientes preguntas:

  1. Fíjate en las diferentes variables del marco de datos. Sabrías identificar el nombre de la organización que corresponde a cada sigla? Encontrarás la respuesta en ?codelist. Escoge y describe brevemente cinco de ellas.
  2. Escoge una de estas instituciones e investiga la metodología y la definición de estado que usa.
  3. ¿Por qué necesitamos estándares internacionales? Busca en internet otra codificación ISO (que no sea la 3166) y comenta su relevancia en el ámbito internacional.

Ahora que ya nos hemos familiarizado con algunas de las instituciones que categorizan los estados, vamos a ver como los clasifican. A continuación, en la Tabla 1, reproducimos un fragmento del marco de datos codelist_panel. Para ello hemos transformado codelist_panel en el objeto cc:

  • Hemos mantenido solo los valores correspondientes al año 2000.
  • Hemos seleccionando solo unas pocas columnas, la de country.name.en (que hemos renombrado como country), y las iso2c, iso3c, iso3n, cowc, cown, eurostat e imf.

Observamos que los códigos acostumbran a tener entre 2 y 3 cifras y suelen estar formados por caracteres (c) o por números (n). Por ejemplo, iso2n tiene dos números, cowc está formado por caracteres, etc.

cc <- codelist_panel %>%
  filter(year == 2000) %>% 
  select(country = country.name.en, iso2c, iso3c, iso3n, cowc, cown, eurostat, imf) %>%
  head(20)
cc
Table 1: Códigos de países
countryiso2ciso3ciso3ncowccowneurostatimf
AfghanistanAFAFG4AFG700AF512
AlbaniaALALB8ALB339AL914
AlgeriaDZDZA12ALG615DZ612
AndorraADAND20AND232ADNA
AngolaAOAGO24ANG540AO614
Antigua & BarbudaAGATG28AAB58AG311
ArgentinaARARG32ARG160AR213
ArmeniaAMARM51ARM371AM911
AustraliaAUAUS36AUL900AU193
AustriaATAUT40AUS305AT122
AzerbaijanAZAZE31AZE373AZ912
BahamasBSBHS44BHM31BS313
BahrainBHBHR48BAH692BH419
BangladeshBDBGD50BNG771BD513
BarbadosBBBRB52BAR53BB316
BelarusBYBLR112BLR370BY913
BelgiumBEBEL56BEL211BE124
BelizeBZBLZ84BLZ80BZ339
BeninBJBEN204BEN434BJ638
BhutanBTBTN64BHU760BT514

PRACTICA 1: A continuación crearemos un marco de datos personalizado con los países y variables que queramos. Por ello, habrá que ayudar del código siguiente y cambiar algunos de los parámetros:

  • Para cambiar los países de la tabla (sustituyendo “Country1,” “Country2” por los países en cuestión) deberéis de saber primero los nombres exactos de los paises. Utilizad unique(codelist_panel$country.name.en).
  • También cambiaremos algunas columnas. Podéis obtener una lista de las columnas con names(codelist_panel).
cc1 <- codelist_panel %>%
  filter(country.name.en %in% c("Country 1", "Country 2", "Country 3"), #añadid dos o más países, aseguraros que escribís el nombre de cada país correctamente
         year %in% c(1970, 2010)) %>% # cambiad el año
  select(country = country.name.en,
         iso2c, iso3c, iso3n, cowc, cown, eurostat, imf) #seleccionad otras instituciones
cc1 #imprimid el marco de datos

La función countrycode()

La principal utilidad del paquete countrycode recae en que nos permite equiparar (para posteriormente juntar) datos de países que provienen de bases de datos diferentes. Supongamos, por ejemplo, que tenemos los dos siguientes marcos de datos:

countrycodegdp
FranceFR30000
GermanyGE35000
countrycodelang
French RepublicFRAFrench
Federal Republic of GermanyFRGGerman

Como podéis observar, los dos marcos de datos contienen datos de los mismos países: Francia y Alemania. Sin embargo, no hay una manera obvia de juntarlos de forma automática por similitud de celdas. Cada marco de datos se refiere al país de una manera diferente y también utiliza un código diferente.

  • Como sólo tenemos dos observaciones, una solución sería juntar los marcos de datos de manera manual usando programas tipo Excel.
  • Pero imaginemos que tenemos datos por un período de más de 50 años de todos los países del mundo. Serían aproximadamente 150 * 50 = 7.500 casos, de manera que ajuntarlos de forma manual nos llevaría muchas horas de trabajo.
  • Necesitamos una forma automática que nos permita hacer esta operación. Así podríamos, por ejemplo, enlazar de una manera muy rápida una base de datos que funcione con iso3c con la base de datos del Banco Mundial, que funciona con wb.
  • La función countrycode() nos permite juntar marcos de datos con códigos distintos.

Veamos cómo examinar los códigos de un marco de datos. Si recuperamos el marco de datos cc que hemos creado anteriormente, podemos examinar la codificación de los países según iso2c de la siguiente manera:

cc$iso2c
##  [1] "AF" "AL" "DZ" "AD" "AO" "AG" "AR" "AM" "AU" "AT" "AZ" "BS" "BH" "BD" "BB"
## [16] "BY" "BE" "BZ" "BJ" "BT"

Con la función countrycode() podemos convertir estas codificaciones en unas otras de manera muy sencilla. Fijaos que dentro de la función hay tres argumentos, separados por comas:

  • Como primer argumento de la función indicaremos donde se encuentra el código que queremos transformar. En este ejemplo, indicaríamos el marco de datos y la variable correspondiente: cc$iso2c.
  • Como segundo argumento indicaremos cuál es la nomenclatura de este código.
  • Como tercer argumento indicaremos la nomenclatura a la que lo queremos transformar.
countrycode(cc$iso2c, origin = "iso2c", destination = "wb")
##  [1] "AFG" "ALB" "DZA" "AND" "AGO" "ATG" "ARG" "ARM" "AUS" "AUT" "AZE" "BHS"
## [13] "BHR" "BGD" "BRB" "BLR" "BEL" "BLZ" "BEN" "BTN"

Fijaos que la función nos ha transformado los códigos de iso2c, de dos caracteres, a códigos de wb, de tres caracteres. Con la función countrycode() también podemos saber, por ejemplo, a qué nomenclatura fao correspondería a España si supiéramos su nomenclatura iso2c.

countrycode(c("ES"), "iso2c", "fao")
## [1] 203

PRACTICA 2: Selecciona otro país que no sea España y prueba la conversión de iso2c a otra nomenclatura que no sea fao. Puedes ver la lista de países con:

View(distinct(code, country.name.en, iso2c))

Caso práctico 1

Tenemos el marco de datos siguiente, formado por diversas variables. Los códigos de los países se encuentran en la columna md_agr$code:

md_agr <- data.frame(country = c("France", "France", "United Kingdom", "United Kingdom", 
                              "Poland", "Poland", "Congo", "Congo"), 
                     code = c("FRN", "FRN", "UKG", "UKG", "POL", "POL", "CON", "CON"),
                     year = c(1980, 2010, 1980, 2010, 1980, 2010, 1980, 2010), 
                     dem = c(TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE), 
                     pib_cap = c(12672.18, 40638.33, 10032.06, 38893.02, 5241.75, 12597.86, 
                                 927.10, 2737.34), agr = c(56.8, 52.8, 76.8, 71.2, 64.5, 47.2, 30.8, 31),
                     stringsAsFactors = FALSE)

Podemos visualizar el marco de datos que acabamos de crear tecleando md_agr.

Table 2: Marco de datos md_agr
countrycodeyeardempib_capagr
FranceFRN1980TRUE12672.1856.8
FranceFRN2010TRUE40638.3352.8
United KingdomUKG1980TRUE10032.0676.8
United KingdomUKG2010TRUE38893.0271.2
PolandPOL1980FALSE5241.7564.5
PolandPOL2010TRUE12597.8647.2
CongoCON1980FALSE927.1030.8
CongoCON2010FALSE2737.3431.0

Ejercicio 2: Queremos transformar los valores de la columna code del marco de datos md_agr a iso3n. No obstante, desconocemos cuál es la nomenclatura utilizada en code.

  • Averigua cuál es la nomenclatura en cuestión. Tendrás que substituir los interrogantes del código y probar diferentes combinaciones hasta que encuentres una que te realice la conversión correctamente.
md_agr %>%
  mutate(code = countrycode(code, origin = "????", destination = "iso3n"))

Los objetos codelist i cldr_examples

El paquete countrycode no solo nos permite modificar los códigos de los países, sino que también nos permite modificar los nombres de los países a otro idioma. Es decir, podemos traducir en castellano, en catalán, en euskera, en suahili o en cualquier idioma los nombres de los países de una base de datos con unas pocas líneas de código. Fijaros en la Tabla cldr_examples que registra 622 maneras diferentes de denominar los Territorios Franceses del Sur (CLDR responde al nombre de Common Locale Date Repository, un repositorio que registra terminos con centenares de idiomas diferentes).

Reproducid la tabla tecleando cldr_examples o podéis hacer sample(cldr_examples[,2], 10) diversas veces para observar varias muestras de los diferentes idiomas que contempla. En la Tabla 3 podéis ver una muestra:

Table 3: Nombres de países CLDR
CodeExample
cldr.variant.fa_afسرزمین‌های جنوب فرانسه
cldr.name.basTF
cldr.name.es_mxTerritorios Australes Franceses
cldr.variant.nbDe franske sørterritorier
cldr.short.ru_uaФранцузские Южные территории
cldr.name.ps_pkد فرانسے جنوبي سیمے
cldr.variant.mnФранцын өмнөд газар нутаг
cldr.variant.sr_latnFrancuske Južne Teritorije
cldr.name.mgoTF
cldr.variant.ko_kp프랑스 남부 지방
cldr.short.omTF
cldr.name.dyoTF
cldr.variant.thเฟรนช์เซาเทิร์นเทร์ริทอรีส์
cldr.name.ckbهەرێمە باشووریەکانی فەرەنسا
cldr.variant.zghTF
cldr.variant.furTeritoris meridionâi francês
cldr.variant.asদক্ষিণ ফ্ৰান্সৰ অঞ্চল
cldr.short.quTerritorios Australes Franceses
cldr.variant.jgoTF
cldr.variant.plFrancuskie Terytoria Południowe i Antarktyczne
cldr.short.kkФранцияның оңтүстік аймақтары
cldr.short.dzཕྲནཅ་གི་ལྷོ་ཕྱོགས་མངའ་ཁོངས
cldr.name.twqTF
cldr.short.eeAnyiehe Franseme nutome
cldr.name.ksbTF

El objeto cldr_examples es solo una pequeña muestra de lo que contiene el marco de datos codelist, que es un exhaustivo marco de datos que alberga centenares de codificaciones de países y registros CLDR. Como veis a la tabla anterior, los nombres de países tienen un código de referencia que empieza por cldr, después figura name, variant o short y a continuación lo que parece una abreviación del nombre del idioma.

PRACTICA 3: Observad el marco de datos codelist con glimpse(codelist). Al principio de la lista os aparecerán algunas variables que ya hemos visto anteriormente. A continuación comenzarán a aparecer las variables que empiezan por cldr.

  1. Intentad identificar las variables que corresponden al ruso, el coreano, el japonés y el croata.
  2. Una vez identificado un idioma, podéis inspeccionar el contenido de la variable utilizando como plantilla los ejemplos siguientes. Solo tenéis que substituir el código que consideréis oportuno.
names(codelist) #si queréis consultar solo los códigos
codelist[,"cldr.name.ca"] #ver nombres en catalán
codelist[,"cldr.name.es"] #ver nombres en castellano
codelist[,"cldr.name.eu"] #ver nombres en euskera

Con lo que hemos aprendido hasta ahora ya podemos crear un marco de datos en cualquier idioma del mundo. Para testarlo, modificaremos el marco de datos cc para que los nombres de los países nos aparezcan en otro idioma. Lo podemos hacer con la función countrycode(). El resultado lo podéis ver en la Tabla 4.

eus <- cc #hacemos primero una copia del objeto
eus <- eus %>% 
  mutate(country = countrycode(country, #marcamos la columna que queremos modificar
                           origin = "country.name.en", #marcamos el código de la columna de origen
                           destination = "cldr.name.eu")) #marcamos el código de la columna de destino 
eus #observamos el nuevo marco de datos
Table 4: Marco de datos en euskera
countryiso2ciso3ciso3ncowccowneurostatimf
AfganistanAFAFG4AFG700AF512
AlbaniaALALB8ALB339AL914
AljeriaDZDZA12ALG615DZ612
AndorraADAND20AND232ADNA
AngolaAOAGO24ANG540AO614
Antigua eta BarbudaAGATG28AAB58AG311
ArgentinaARARG32ARG160AR213
ArmeniaAMARM51ARM371AM911
AustraliaAUAUS36AUL900AU193
AustriaATAUT40AUS305AT122
AzerbaijanAZAZE31AZE373AZ912
BahamakBSBHS44BHM31BS313
BahrainBHBHR48BAH692BH419
BangladeshBDBGD50BNG771BD513
BarbadosBBBRB52BAR53BB316
BielorrusiaBYBLR112BLR370BY913
BelgikaBEBEL56BEL211BE124
BelizeBZBLZ84BLZ80BZ339
BeninBJBEN204BEN434BJ638
BhutanBTBTN64BHU760BT514

PRACTICA 4: Realizad el mismo procedimiento pero con otro idioma como se indica a continuación.

  • Cread una copia del objeto cc con el nombre que queráis.
  • Introducid el nombre del objeto en la segunda línea de código y proponed un nuevo idioma para el marco de datos.
????? <- cc #creamos una copia del objeto cc
????? <- ????? %>% 
  mutate(country = countrycode(country, 
                               origin = "country.name.en", 
                               destination = "cldr.?????.???"))  #proponed un nuevo idioma

Caso práctico 2

Queremos hacer un estudio sobre la democracia i el covid, pero tenemos datos procedentes de dos fuentes diferentes.

Nuestro objetivo es crear un marco de datos único, donde el nombre de los países figure en un idioma diferente al inglés.

Primero descargamos y limpiamos los datos de democracia. Se nos generará la Tabla 5, que podéis imprimir tecleando polity. Observamos que tenemos dos columnas con códigos de país, una columna con el nombre del país y una con la variable polity2, que nos mide en un contínuum si un país es una democracia (+10) o no lo es (-10).

polity <- haven::read_spss("http://www.systemicpeace.org/inscr/p5v2018.sav")
polity <- polity %>%
  filter(year == last(year)) %>%
  select(ccode, scode, country, polity2)
Table 5: Índice de democracia Polity V
ccodescodecountrypolity2
700AFGAfghanistan-1
339ALBAlbania9
615ALGAlgeria2
540ANGAngola-2
160ARGArgentina9
371ARMArmenia7

Y descargamos y limpiamos los datos del covid19. Nos generará la Tabla 6, que podemos imprimir tecleando covid.

download.file("https://www.ecdc.europa.eu/sites/default/files/documents/COVID-19-geographic-disbtribution-worldwide.xlsx", 
              "covid.xlsx")
covid <- read_xlsx("covid.xlsx")
covid <- covid %>%
  filter(year == "2020", month == "6", day == "11") %>%
  select(code = countryterritoryCode, country = countriesAndTerritories, cases, deaths,
  popData2019, continentExp)

DESCARGA: Si no os funciona el código de descarga, descargad el archivo .xlsx manualmente, ubicadlo en vuestro directorio de trabajo y cambiadle el nombre por covid.xlsx. A continuación, cargadlo con covid <- read_xlsx(“covid.xlsx”) y seguid el código.

  • Otra opción es el siguiente código alternativo, que requiere el paquete readr.
library(readr) #instalar paquete readr
covid <- read_csv("https://opendata.ecdc.europa.eu/covid19/casedistribution/csv")
covid <- covid %>% 
  filter(dateRep == "11/06/2020") %>%
  select(code = countryterritoryCode, country = countriesAndTerritories, 
         cases, deaths, popData2019, continentExp)

Table 6: Datos Covid-19 a 10 de junio de 2020
codecountrycasesdeathspopData2019continentExp
AFGAfghanistan6842138041757Asia
ALBAlbania4202880913Europe
DZAAlgeria102843053054Africa
ANDAndorra0077146Europe
AGOAngola17031825299Africa
AIAAnguilla0014872America

Ejercicio 3: Examinad los marcos de datos polity y covid tal y como aparecen en las tablas 5 y 6:

  1. Observad las columnas donde aparecen códigos de países. ¿Cuáles son? ¿Hay alguna columna de código de país en el primer marco de datos que sea exactamente igual en el segundo?
  2. En caso de no coincidir, ¿conoces alguna manera con la que pudiéramos transformar las columnas de un marco de datos para que sean exactamente iguales al otro marco de datos?

qué pensáis que podríamos hacer para tener dos columnas que sean exactamente iguales a cada marco de datos a partir de lo que hemos aprendido hasta ahora.

Seguramente nos hemos fijado que las variables polity$scode y covid$code son bastante parecidas. Pero en la primera, Argelia es ALG mientras que en la segunda es DZA. Angola tampoco coincide. Por lo tanto, los marcos de datos polity y covid no tienen códigos de la misma nomenclatura. Esto nos supone un problema para unir los dos marcos de datos, puesto que para engancharlos tendríamos que encontrar alguna columna que sea exactamente igual en uno y otro.
Vamos a ver qué posibilidades nos ofrece el paquete countrycode si miramos el caso de Algeria:

filter(codelist_panel, country.name.en == "Algeria", year == 2010) %>%
  gather()
## # A tibble: 48 × 2
##    key                   value   
##    <chr>                 <chr>   
##  1 country.name.en       Algeria 
##  2 year                  2010    
##  3 ar5                   MAF     
##  4 cctld                 .dz     
##  5 continent             Africa  
##  6 country.name.de       Algerien
##  7 country.name.de.regex algerien
##  8 country.name.en.regex algeria 
##  9 cowc                  ALG     
## 10 cown                  615     
## # … with 38 more rows

Observamos que hay varias columnas donde Argelia está codificado como ALG, pero deducimos que la columna que nos interesa es la p4c, ya que si tecleamos ?codelist vemos que responde a p4c: Polity IV character country code. En el caso del segundo marco de datos, vemos que hay varias bases de datos que tienen Argelia codificado como DZA. Tendremos que probar varias combinaciones para encontrar la correcta. El código de partida para unir las dos bases de datos es el siguiente:

polity %>%
  mutate(country = countrycode(country, "country.name.en", "cldr.????.????"), #introduir idioma
         scode = countrycode(scode, "p4c", "????????")) %>% #introducir código país
  inner_join(covid, by = c("scode" = "code")) %>%
  rename(country = country.x) %>% 
  select(-country.y)

EJERCICIO FINAL: Modificad los interrogantes del código anterior y probad de encontrar la combinación que os permita crear un marco de datos parecido al que encontrareis representado en la Tabla 7.

  1. En la primera parte tenéis que introducir el código de idioma que queráis (no es necesario que sea el que aparece en el ejemplo).
  2. En la segunda parte tenéis que introducir una nomenclatura de código de país para que el código del primer marco de datos se ajuste al del segundo marco de datos.
  3. Para decidir cuál es el código de país más apropiado, tenéis que priorizar el que os genere el marco de datos con mas observaciones (el que tenga el mayor numero de filas posible).
Table 7: Datos de Covid19 y democracia
ccodescodecountrypolity2casesdeathspopData2019continentExp
700AFGAfganistan-16842138041757Asia
339ALBAlbania94202880913Europe
615DZAAljeria2102843053054Africa
540AGOAngola-217031825299Africa
160ARGArgentina912391844780675America
371ARMArmenia7428102957728Europe
900AUSAustralia109025203200Oceania
305AUTAustria103418858775Europe
373AZEAzerbaijan-7339410047719Europe
692BHRBahrain-10021641164Asia
211BELBelgika81321011455519Europe
434BENBenin70011801151Africa
439BFABurkina Faso60020321383Africa
760BTNBhutan730763094Asia
370BLRBielorrusia-780169452409Europe
771BGDBangladesh-6319037163046173Asia
145BOLBolivia76372511513102America
346BIHBosnia-HerzegovinaNA4913300998Europe
571BWABotswana8602303703Africa
140BRABrasil8329131274211049519America
516BDIBurundi-10011530577Africa
355BGRBulgaria9007000039Europe
811KHMKanbodia-40016486542Asia
20CANKanada104726337411038America
471CMRKamerun-4248625876387Africa
402CPVCabo Verde10300549936Africa
482CAFAfrika Erdiko Errepublika66414745179Africa
483TCDTxad-22115946882Africa
155CHLTxile10573719218952035America
710CHNTxina-71101433783692Asia
100COLKolonbia716046150339443America
581COMKomoreak-300850891Africa
484COGKongo-41715380504Africa
94CRICosta Rica108615047561America
344HRVKroazia9204076246Europe
40CUBKuba-56011333484America
352CYPZipre1020875899Europe
316CZETxekia973010649800Europe
390DNKDanimarka101505806081Europe
522DJIDjibuti3420973557Africa
42DOMDominikar Errepublika7393610738957America
130ECUEkuador55233017373657America
651EGYEgipto-4145536100388076Africa
411GNQEkuatore Ginea-6001355982Africa
531ERIEritrea-7003497117Africa
366ESTEstonia91101324820Europe
529ETHEtiopia11703112078727Africa
860TLSEkialdeko Timor800129312Asia
375FINFinlandia101505517919Europe
950FJIFiji200889955Oceania
220FRAFrantzia105452367012883Europe
481GABGabon38112172578Africa
420GMBGambia4002347696Africa
452GHAGhana8157030417858Africa
255DEUAlemania105552683019213Europe
404GNBGinea Bissau6001920917Africa
350GRCGrezia1010010724599Europe
372GEOGeorgia7903996762Europe
90GTMGuatemala83552717581476America
438GINGinea40012771246Africa
110GUYGuyana700782775America
41HTIHaiti5134211263079America
91HNDHonduras7425199746115America
310HUNHungaria101019664124Europe
750INDIndia999963571366417756Asia
850IDNIndonesia9124036270625567Asia
205IRLIrlanda101644904240Europe
630IRNIran-720118182913893Asia
645IRQIrak611463439309789Asia
666ISRIsrael68708519373Asia
325ITAItalia102027160550092Europe
437CIVBoli Kosta4186325716554Africa
51JAMJamaika9002948277America
663JORJordania-318010101697Asia
740JPNJaponia10411126860299Asia
501KENKenya9105152573967Africa
690KWTKuwait-768324207077Asia
703KGZKirgizistan83606415851Asia
705KAZKazakhstan-6239618551428Asia
812LAOLaos-7007169456Asia
367LVALetonia8301919968Europe
450LBRLiberia71404937374Africa
660LBNLibano62006855709Asia
570LSOLesotho8002125267Africa
620LBYLibia04606777453Africa
368LTULituania10622759631Europe
212LUXLuxenburgo103061573Europe
435MRTMauritania-2004525698Africa
343MKDIpar Mazedonia912572083458Europe
580MDGMadagaskar624126969306Africa
820MYSMalaysia72131949789Asia
590MUSMaurizio1000126967Africa
553MWIMalawi60018628749Africa
70MEXMexiko84883708127575529America
359MDAMoldavia929664043258Europe
432MLIMali581219658023Africa
348MNEMontenegro900627988Europe
712MNGMongolia10003225166Asia
600MARMaroko-418036471766Africa
775MMRMyanmar (Birmania)83054045422Asia
541MOZMozambike519030366043Africa
565NAMNamibia6002494524Africa
790NPLNepal7279028608715Asia
920NZLZeelanda Berria10004783062Oceania
93NICNikaragua615596545503America
475NGANigeria740917200963603Africa
436NERNiger50023310719Africa
385NORNorvegia101305328212Europe
210NLDHerbehereak101841117282163Europe
698OMNOman-868914974992Asia
770PAKPakistan75834101216565317Asia
95PANPanama965610424644America
150PRYParaguai91507044639America
135PERPeru9508716532510462America
840PHLFilipinak874010108116622Asia
910PNGPapua Ginea Berria5008776119Oceania
290POLPolonia101972337972812Europe
235PRTPortugal10294310276617Europe
694QATQatar-10171642832071Asia
732KORHego Korea845051225321Asia
360ROUErrumania91961519414458Europe
365RUSErrusia48404217114587226Europe
517RWARuanda-313012626938Africa
560ZAFHegoafrika924304858558267Africa
92SLVEl Salvador8834645355America
670SAUSaudi Arabia-1037173634268529Asia
626SDNSudan-41851742813237Africa
433SENSenegal7124216296362Africa
342SRBSerbia86618772228Europe
451SLESierra Leona73707813207Africa
830SGPSingapur-245105804343Asia
317SVKEslovakia10205450421Europe
349SVNEslovenia10212080908Europe
520SOMSomalia536015442906Africa
230ESPEspainia10427046937060Europe
780LKASri Lanka610021323734Asia
525SSDHego Sudan00011062114Africa
115SURSurinam500581363America
572SWZSwazilandia-92701148133Africa
380SWESuedia108907810230185Europe
225CHESuitza1023128591361Europe
652SYRSiria-96017070132Asia
702TJKTajikistan-37309321023Asia
510TZATanzania30058005461Africa
800THAThailandia-30069625581Asia
461TGOTogo-22108082359Africa
52TTOTrinidad eta Tobago10001394969America
616TUNTunisia70011694721Africa
640TURTurkia-49221783429607Asia
696AREArabiar Emirerri Batuak-860319770526Asia
500UGAUganda-18044269587Africa
200GBRErresuma Batua8100324566647112Europe
369UKRUkraina45252343993643Europe
165URYUruguai10103461731America
2USAAmeriketako Estatu Batuak820614918329064917America
704UZBUzbekistan-9148132981715Asia
101VENVenezuela-3106028515829America
818VNMVietnam-70096462108Asia
679YEMYemen036229161922Asia
490CODKongoko Errepublika Demokratikoa-3131686790568Africa
551ZMBZambia652017861034Africa
552ZWEZimbabwe46014645473Africa

Referencias

Arel-Bundock, Vincent, Nils Enevoldsen, and CJ Yetman. 2018. Countrycode An R package to convert country names and country codes.” Journal of Open Source Software 28 (3): 848.
Marshall, Monty G., and Ted Robert Gurr. 2020. Polity V. Political Regime Characteristics and Transitions, 1800-2018.” Center for Systemic Peace.
Next