Se desea fusionar dos bases de datos. Una se compone de nombres y edades de estudiantes (B1), mientras que la otra tiene información sobre nombres y lugares de nacimiento también de estudiantes (B2). El problema está en que las dos bases de datos tienen, tanto observaciones en común, como diferentes. Es decir, existen estudiantes que están en ambas bases de datos, mientras que existen algunos(as) que solo están en una de las dos.
print(B1)
## # A tibble: 7 x 2
## NOMBRE EDAD
## <chr> <dbl>
## 1 FAC 16
## 2 PAT 17
## 3 PED 18
## 4 LUI 19
## 5 NAH 20
## 6 VLA 21
## 7 ANT 22
print(B2)
## # A tibble: 6 x 2
## NOMBRE LUG
## <chr> <chr>
## 1 FAC MEX
## 2 PAT EDO
## 3 PED SLP
## 4 LUI GDL
## 5 FRO MTY
## 6 CES ZAC
Las preguntas que surgen son : ¿cómo pueden fusionarse estas bases de datos y qué comandos utilizar?
Merge es un comando de R base. Esto quiere decir 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. Puede crearse una base de datos nueva (BT1) asignando este comando con B1 y B2 de la siguiente forma :
BT1 <- merge(B1,B2)
print(BT1)
## NOMBRE EDAD LUG
## 1 FAC 16 MEX
## 2 LUI 19 GDL
## 3 PAT 17 EDO
## 4 PED 18 SLP
Esta nueva base tiene información de los nombres de los estudiantes, sus edades y sus lugares de nacimiento. El comando combinó las bases B1 y B2 por medio del nombre de la variable común en ambas : NOMBRE. Sin embargo, el resultado de esta fusión es una base de datos que solo contiene los elementos comunes de B1 y B2. Como no tiene otra indicación, el comando descartó aquellos estudiantes que tenían información en una base y en la otra no.
Una variación de la sintaxis de este comando resulta de indicarle all=TRUE. Al crear la nueva base de datos BT2, se obtiene lo siguiente :
BT2 <- merge(B1,B2,all=TRUE)
print(BT2)
## NOMBRE EDAD LUG
## 1 ANT 22 <NA>
## 2 CES NA ZAC
## 3 FAC 16 MEX
## 4 FRO NA MTY
## 5 LUI 19 GDL
## 6 NAH 20 <NA>
## 7 PAT 17 EDO
## 8 PED 18 SLP
## 9 VLA 21 <NA>
BT2 combina la información sobre los estudiantes de ambas bases de datos y genera un nuevo data.frame. Es decir, BT2 tiene:
En este caso, se mantiene la información de todos los estudiantes. A aquellos estudiantes que no tengan información en alguna de las bases de datos se les asigna el valor <NA>, que significa ‘Not available’, según corresponda.
Por ejemplo, ANT es un estudiante que está en B1, pero que no está en B2. Esto quiere decir que no existe información sobre el lugar de nacimiento de ANT. Al no tener esta información, se le asigna el valor <NA> en la columna ’LUG’.
Otra variación de la sintaxis de este comando resulta de indicarle all.x=TRUE. Al crear la nueva base de datos BT3, se obtiene lo siguiente:
BT3 <- merge(B1,B2,all.x=TRUE)
print(BT3)
## NOMBRE EDAD LUG
## 1 ANT 22 <NA>
## 2 FAC 16 MEX
## 3 LUI 19 GDL
## 4 NAH 20 <NA>
## 5 PAT 17 EDO
## 6 PED 18 SLP
## 7 VLA 21 <NA>
Si utilizamos el comando merge con la indicación all.x=TRUE, solo toma como referencia la información de los estudiantes que están en la base de datos x, es decir, la primera entrada del comando. En este caso, la primera base ingresada fue B1. Es decir, solo nos muestra la información sobre los 7 estudiantes de B1 y busca información en B2 sobre sus lugares de nacimiento. A aquellos estudiantes de B1 que no tengan información en B2 se les asigna <NA>.
La última variación de la sintaxis de este comando que describe este documento es all.y=TRUE. Al crear la nueva base de datos BT4, se obtiene lo siguiente :
BT4 <- merge(B1,B2,all.y=TRUE)
print(BT4)
## NOMBRE EDAD LUG
## 1 CES NA ZAC
## 2 FAC 16 MEX
## 3 FRO NA MTY
## 4 LUI 19 GDL
## 5 PAT 17 EDO
## 6 PED 18 SLP
Se realiza un proceso análogo, pero ahora solo nos da como resultado la información de los estudiantes que están en B2.
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.
Espero que les haya sido de utilidad. Cualquier duda, comentario o sugerencia que tengan, pueden enviarla al correo : vladi_26@hotmail.com. Un agradecimiento muy especial a los compañeros y compañeras del curso de Econometría Avanzada del Doctorado en Políticas Públicas del CIDE quienes me inspiraron a hacer esta presentación.