Juntando tablas.

Juntar tablas es una actividad muy importante para realizar análisis de datos, debido a que, muchas veces, los datos que nos interesa analizar estan en dos tablas distintas.

Procedimiento para juntar tablas:

Paso 1: Identificar la variable llave. La variable llave es la variable que tiene información en comun para ambas tablas y es la que permite hacer el match entre ambas.

Paso 2: Identificar la relación entre las variables. La relación puede ser de tres tipo:

  • Relación 1 a 1, cuando un valor de una tabla hace match con el valor de otra tabla.

  • Relación 1 a muchos, cuando un valor de una tabla se corresponde a muchos valores de la otra tabla.

  • Relación muchos a muchos, cuando varios valores de una tabla se relacionan con varios otros valores de otras tablas. Esta situación es rara y no es muy deseable, en general.

Para los presentes ejercicios, nos enfocaremos en las primeras dos relaciones.

Paso 3. Identificar el procedimiento de unión que deseo implementar.

Para este proceso de unión, podemos utilizar una de las siguientes cuatro funciones de {dplyr}:

  • inner_join(), donde la tabla resultante nos da la unión de aquellos valores que coinciden entre sí.

  • left_join(), donde la tabla resultante nos da la unión de los valores que coinciden con la tabla izquierda. Nota. Las posiciones de las tablas son relativas al orden en que las declaramos por lo que, generalmente, vamos a tratar de poner la mas importante a la izquierda.

  • right_join(), donde la tabla resultante nos da la unión de los valores que coinciden con la tabla derecha.

  • full_join(), donde la tabla resultante conserva los valores de la tabla derecha y la izquierda, rellenando con NAs aquellos valores donde no hay coincidencias.

Ejemplos de joins.

Para el presente ejemplo, vamos a realizar uniones de las siguientes tablas:

Estas tablas las vamos a generar con el siguiente código:

Paso 1 Identificamos la variable llave.

En estos casos, la variable llave es la variable Municipios.

Paso 2. Identificamos las relaciones.

En estos casos, la relación es 1 a 1, ya que la unidad de observación para las cuatro tablas es el municipio.

Paso 3. Realizamos el join

Para esto, vamos a experimentar con las 4 formas de hacer join vistas arriba:

Primero, leemos la librería tidyverse, la cual contiene a la biblioteca dplyr, la cual a su vez contiene las funciones para hacer unión de tablas.

Ahora si, procedemos a hacer las uniones.

Dada la explicación brindada arriba (y otras explicaciones que pudieras buscar por tu cuenta en Google), trata de entender por qué las uniones de las tablas se dieron como se dieron.

    1. inner_join(x = base_izq, y = base_der, by = "llave")

Corroboramos:

## # A tibble: 3 x 3
##   Municipios  Casos Fallecimientos
##   <chr>       <int>          <int>
## 1 Yecapixtla     13              1
## 2 Jonacatepec    23              2
## 3 Tepoztlán      50             20
## # A tibble: 2 x 3
##   Municipios  Fallecimientos Hospitales
##   <chr>                <int>      <int>
## 1 Jonacatepec              2          1
## 2 Tepoztlán               20          2
## # A tibble: 5 x 3
##   Municipios  Casos Poblacion
##   <chr>       <int>     <int>
## 1 Ocuituco       10     18000
## 2 Yecapixtla     13     40000
## 3 Jonacatepec    23     35000
## 4 Tetela          5     20000
## 5 Tepoztlán      50     45000
    1. left_join(x = base_izq, y = base_der, by = "llave")

Corroboramos:

## # A tibble: 5 x 3
##   Municipios  Casos Fallecimientos
##   <chr>       <int>          <int>
## 1 Ocuituco       10             NA
## 2 Yecapixtla     13              1
## 3 Jonacatepec    23              2
## 4 Tetela          5             NA
## 5 Tepoztlán      50             20
## # A tibble: 3 x 3
##   Municipios  Fallecimientos Hospitales
##   <chr>                <int>      <int>
## 1 Yecapixtla               1         NA
## 2 Jonacatepec              2          1
## 3 Tepoztlán               20          2
## # A tibble: 5 x 3
##   Municipios  Casos Poblacion
##   <chr>       <int>     <int>
## 1 Ocuituco       10     18000
## 2 Yecapixtla     13     40000
## 3 Jonacatepec    23     35000
## 4 Tetela          5     20000
## 5 Tepoztlán      50     45000
    1. right_join(x = base_izq, y = base_der, by = "llave")

Corroboramos:

## # A tibble: 3 x 3
##   Municipios  Casos Fallecimientos
##   <chr>       <int>          <int>
## 1 Yecapixtla     13              1
## 2 Jonacatepec    23              2
## 3 Tepoztlán      50             20
## # A tibble: 4 x 3
##   Municipios  Fallecimientos Hospitales
##   <chr>                <int>      <int>
## 1 Jonacatepec              2          1
## 2 Tepoztlán               20          2
## 3 Ocuituco                NA          1
## 4 Tetela                  NA          1
## # A tibble: 5 x 3
##   Municipios  Casos Poblacion
##   <chr>       <int>     <int>
## 1 Ocuituco       10     18000
## 2 Yecapixtla     13     40000
## 3 Jonacatepec    23     35000
## 4 Tetela          5     20000
## 5 Tepoztlán      50     45000
    1. full_join(x = base_izq, y = base_der, by = "llave")

Corroboramos:

## # A tibble: 5 x 3
##   Municipios  Casos Fallecimientos
##   <chr>       <int>          <int>
## 1 Ocuituco       10             NA
## 2 Yecapixtla     13              1
## 3 Jonacatepec    23              2
## 4 Tetela          5             NA
## 5 Tepoztlán      50             20
## # A tibble: 5 x 3
##   Municipios  Fallecimientos Hospitales
##   <chr>                <int>      <int>
## 1 Yecapixtla               1         NA
## 2 Jonacatepec              2          1
## 3 Tepoztlán               20          2
## 4 Ocuituco                NA          1
## 5 Tetela                  NA          1
## # A tibble: 5 x 3
##   Municipios  Casos Poblacion
##   <chr>       <int>     <int>
## 1 Ocuituco       10     18000
## 2 Yecapixtla     13     40000
## 3 Jonacatepec    23     35000
## 4 Tetela          5     20000
## 5 Tepoztlán      50     45000

Una vez que ya entendimos como estuvo la cosa, vamos a trabajar con bases más grandes.

A continuación, se muestra el código necesario para acceder a los datos de Centros Educativos registrados en el CEMABE.

La tabla centros contiene datos de los centros educativos del Censo de Escuelas, Maestros y Alumnos de Educación Básica y Especial, mientras que la tabla inmuebles contiene información de los inmuebles en los cuales se encuentran ubicados dichos centros.

X1 ID_INM CLAVE_CT ENT NOM_ENT MUN NOM_MUN LOC NOM_LOC AGEB
1589 198685 09FUA0317V2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2729
1930 198685 09DPR2673O1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2729
2198 198685 09DPR3270B2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2729
2202 198686 09DJN1169J5 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3318
1970 198687 09DPR0014R5 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3318
1329 198688 09PJN5843A1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3322
1274 198689 09PJN5608X1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 0027
1603 198690 09PES0978R1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2733
1590 198691 09PJN5548Z1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2733
1848 198692 09DJN1338O1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3248
2195 198692 09DJN1375S2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3248
2261 198693 09DJN1413E2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3252
2357 198693 09DJN0922A1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3252
2028 198694 09DTV0144J2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3252
2105 198694 09DTV0001M1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3252
1360 198695 09PPR1609L1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2733
1529 198695 09PES0980F1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2733
2241 198696 09DJN0880S1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 0027
2316 198696 09DJN1053J2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 0027
2089 198697 09DPR0995J2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 0027
ID_INM ENT NOM_ENT MUN NOM_MUN LOC NOM_LOC AGEB MZA ENT_ADMON
198685 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2729 022 09
198686 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 3318 008 09
198687 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 3318 012 09
198688 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 3322 003 09
198689 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 0027 025 09
198690 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2733 012 09
198691 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2733 012 09
198692 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 3248 017 09
198693 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 3252 008 09
198694 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 3252 016 09
198695 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2733 013 09
198696 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 0027 004 09
198697 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 0027 004 09
198698 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 0027 004 09
198699 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 0027 004 09
198700 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2733 010 09
198701 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2733 010 09
198702 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2733 010 09
198703 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2625 016 09
198704 09 Distrito Federal 005 Gustavo A. Madero 0001 Gustavo A. Madero 2625 016 09

Supongamos que nos interesa armar una gran base con ambas bases de datos.

1. Identificando la variable llave.

De las tablas anteriores, vemos que la variable que liga las observaciones es la variable ID_INM. Esta variable es el numero identificador del inmueble, y tiene información en ambas tablas.

2. Identificamos el tipo de relación

De las tablas, vemos que centros tiene mas de un registro por ID_INM, esto es, que más de un centro educativo se encuentra dentro de un inmueble. Esto seguramente es por aquellos centros educativos que tienen mas de un turno escolar.

3. Realizamos el join

Como nos interesa tener una base conjuntando la información de los centros educativos con la de sus respectivos inmuebles, hacemos un join conservando todos los datos posibles. Para esto, utilizaremos la función full_join().

## [1] 8601  427

Cuadro 1. Cuadro mostrando los primeros renglones y columnas de la gran base.

X1 ID_INM CLAVE_CT ENT.x NOM_ENT.x MUN.x NOM_MUN.x LOC.x NOM_LOC.x AGEB.x
1589 198685 09FUA0317V2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2729
1930 198685 09DPR2673O1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2729
2198 198685 09DPR3270B2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2729
2202 198686 09DJN1169J5 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3318
1970 198687 09DPR0014R5 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3318
1329 198688 09PJN5843A1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3322
1274 198689 09PJN5608X1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 0027
1603 198690 09PES0978R1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2733
1590 198691 09PJN5548Z1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2733
1848 198692 09DJN1338O1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3248
2195 198692 09DJN1375S2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3248
2261 198693 09DJN1413E2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3252
2357 198693 09DJN0922A1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3252
2028 198694 09DTV0144J2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3252
2105 198694 09DTV0001M1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 3252
1360 198695 09PPR1609L1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2733
1529 198695 09PES0980F1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 2733
2241 198696 09DJN0880S1 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 0027
2316 198696 09DJN1053J2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 0027
2089 198697 09DPR0995J2 9 Distrito Federal 5 Gustavo A. Madero 1 Gustavo A. Madero 0027

De esta manera, observamos que acabamos de juntar ambas tablas en una sola, la cual tiene ahora el mismo numero de renglones que la tabla centros y un numero de columnas equivalente a la suma del numero de columnas de centros y de inmuebles junta, menos 1 (por la variable llave).