Queremos fusionar dos bases de datos. Una tiene información sobre la variación porcentual del Producto Interno Bruto para dos estados de México y para dos años respectivamente (B1). La otra tiene información sobre la tasa de desocupación también para dos estados de México y para dos años (B2).
print(B1)
## # A tibble: 4 x 3
## ENTIDAD PERIODO VAR.PIB
## <chr> <dbl> <dbl>
## 1 CDMX 2019 0.4
## 2 CDMX 2018 2.7
## 3 SLP 2019 -0.1
## 4 SLP 2018 4.2
print(B2)
## # A tibble: 4 x 3
## EDO PER DESOCUP
## <chr> <dbl> <dbl>
## 1 CDMX 2019 5.1
## 2 CDMX 2018 5.1
## 3 QRO 2019 4.6
## 4 QRO 2018 3.6
Sin embargo, la fusión de estas bases de datos tiene tres dificultades:
¿Cómo pueden fusionarse estas bases de datos y qué comandos utilizar?
Merge es un comando de R base. Esto implica que no se requiere instalar ninguna paquetería para ser utilizado. Este comando permite fusionar dos bases de datos utilizando los nombres de columnas o variables comunes. La sintaxis más básica de este comando es merge(x,y), donde ‘x’ y ‘y’ son las dos bases de datos. Si usamos el comando merge en su forma más simple con B1 y B2, este es el resultado (no deseado):
BT1 <- merge(B1,B2)
print(BT1)
## ENTIDAD PERIODO VAR.PIB EDO PER DESOCUP
## 1 CDMX 2019 0.4 CDMX 2019 5.1
## 2 CDMX 2018 2.7 CDMX 2019 5.1
## 3 SLP 2019 -0.1 CDMX 2019 5.1
## 4 SLP 2018 4.2 CDMX 2019 5.1
## 5 CDMX 2019 0.4 CDMX 2018 5.1
## 6 CDMX 2018 2.7 CDMX 2018 5.1
## 7 SLP 2019 -0.1 CDMX 2018 5.1
## 8 SLP 2018 4.2 CDMX 2018 5.1
## 9 CDMX 2019 0.4 QRO 2019 4.6
## 10 CDMX 2018 2.7 QRO 2019 4.6
## 11 SLP 2019 -0.1 QRO 2019 4.6
## 12 SLP 2018 4.2 QRO 2019 4.6
## 13 CDMX 2019 0.4 QRO 2018 3.6
## 14 CDMX 2018 2.7 QRO 2018 3.6
## 15 SLP 2019 -0.1 QRO 2018 3.6
## 16 SLP 2018 4.2 QRO 2018 3.6
El resultado no es el deseado porque duplicó las columnas del Estado y las del Año. Además, a cada observación de B1, le asignó las observaciones de B2.
Para unir estas bases de datos correctamente, debemos darle al comando merge más especificaciones que solamente las bases de datos. En este caso, nos gustaría que se fusionaran las bases según el nombre del estado y, luego, según el año. Para esto, debemos indicarle al comando cuáles serán las variables que tomara como referencia para su unión en cada una de las bases. Primero, según el nombre de la ciudad, debemos indicar que, en B1, la variable será ‘ENTIDAD’ y, en B2, la variable será ‘EDO’. Luego, según el año, debemos indicar que, en B1, la variable será ‘PERIODO’ y, en B2, la variable será ‘PER’. Con by.x=, especificamos los criterios de la primera base de datos incluida en el comando (B1) y, con by.y=, especificamos los criterios de la segunda base de datos (B2). Este sería el resultado:
BT2 <- merge(B1,B2,by.x=c("ENTIDAD","PERIODO"), by.y=c("EDO","PER"))
print(BT2)
## ENTIDAD PERIODO VAR.PIB DESOCUP
## 1 CDMX 2018 2.7 5.1
## 2 CDMX 2019 0.4 5.1
Noten que en la especificación by.x= incluimos la opción c("ENTIDAD","PERIODO") porque son dos criterios por los cuales se debe fusionar. Si fuese un solo criterio, por ejemplo: “ENTIDAD”, solo escribimos by.x=”ENTIDAD” y by.y="EDO".
Esta base se acerca un poco más a lo que deseamos. Sin embargo, aun con estas especificaciones, esta nueva base de datos solo se quedó con información de la entidad que era común en las dos bases de datos anteriores (CDMX) y para la que se tenía toda la información.
Para quedarnos con todos los estados independientemente de si falta información o no, debemos especificarle al comando merge la opción all=TRUE. Este es el resultado final:
BT3 <- merge(B1,B2,by.x=c("ENTIDAD","PERIODO"),by.y=c("EDO","PER"),all=TRUE)
print(BT3)
## ENTIDAD PERIODO VAR.PIB DESOCUP
## 1 CDMX 2018 2.7 5.1
## 2 CDMX 2019 0.4 5.1
## 3 QRO 2018 NA 3.6
## 4 QRO 2019 NA 4.6
## 5 SLP 2018 4.2 NA
## 6 SLP 2019 -0.1 NA
Esta es la versión más cercana a la deseable: incluye a todos los estados en ambas bases de datos e hizo el emparejamiento perfecto según el nombre del estado y el año.
Al final, ¿cuál de las variaciones del comando ‘merge’ se debe utilizar? Solo dependerá de la necesidad de la persona que esté administrando las bases de datos.