Capítulo 3 Fusión de dos data frames
3.1 Contenido
En este apartado se desarrollan los siguientes temas:
- Fusión de dos data frames con el mismo número de registros
- Fusión de dos data frames con distinto número de registros
- Se identifican los registros descartados en la fusión de los data frame
3.2 Fusión de dos data frames con identificadores únicos, con el mismo número de registros que se corresponden uno a uno
Los data frames dfLtr y dfNmr tienen 100 registros, identificados en ambos casos del 1 al 100. Hay una correspondencia uno a uno entre ambos.
La fusión de los dos data frames se obtiene con el comando dfFus = merge(x = dfLtr, y = dfNmr, by.x = "IdL", by.y = "IdN")
paste0("dfFus[", nrow(dfFus), " Filas, ", ncol(dfFus), " Columnas]")
- dfFus[100 Filas, 3 Columnas]
El data frame dfFus resultante de la fusión tiene 3 columnas y 100 registros. Cada uno de ellos es el resultado de unir cada registro del data frame dfLtr con el equivalente del data frame dfNmr.
La función summary presenta un resumen de las características del data frame dfFus generado.
A título informativo se presentan los 10 primeros registros del data frame generado.
summary(dfFus)
print(dfFus[1:10,])
## IdL Ltr Nmr
## Min. : 1.00 Length:100 Min. : 1
## 1st Qu.: 25.75 Class :character 1st Qu.: 7
## Median : 50.50 Mode :character Median :13
## Mean : 50.50 Mean :13
## 3rd Qu.: 75.25 3rd Qu.:19
## Max. :100.00 Max. :25
## IdL Ltr Nmr
## 1 1 Alcachofa 1
## 2 2 Coliflor 1
## 3 3 Adelante 1
## 4 4 Agricultor 1
## 5 5 Alcachofa 2
## 6 6 Coliflor 2
## 7 7 Adelante 2
## 8 8 Agricultor 2
## 9 9 Alcachofa 3
## 10 10 Coliflor 3
3.3 Fusión de dos data frames con distinto número de registros
Los data frames dfLx y dfNy tienen 50 y 33 registros respectivamente .
Los dos data frames tienen identificadores únicos, distinto número de registros, identificadores coincidentes en los dos data frames, y con identificadores que están en un data frame y no en el otro.
3.3.1 Fusión de los dos data frames
Se utiliza la función merge
para fusionar los dos data frame anteriores.
dfFus01 = merge(x = dfLtr01, y = dfNmr01, by.x = "IdL", by.y = "IdN")
## [1] 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96
paste0("dfFus01[", nrow(dfFus01), " Filas, ", ncol(dfFus01), " Columnas]")
- dfFus01[16 Filas, 3 Columnas]
El data frame dfFus01 resultante tiene 16 registros, correspondientes a los indentificadores múltiplos de 6 entre 0 y 100, y 3 columnas. Los 16 registros están en dfLx por ser múltiplo de 2, y en dfLy por ser múltiplo de 3.
print(dfFus01[1:10,])
summary(dfFus01)
## IdL Ltr Nmr
## 1 6 Coliflor 2
## 2 12 Agricultor 3
## 3 18 Coliflor 5
## 4 24 Agricultor 6
## 5 30 Coliflor 8
## 6 36 Agricultor 9
## 7 42 Coliflor 11
## 8 48 Agricultor 12
## 9 54 Coliflor 14
## 10 60 Agricultor 15
## IdL Ltr Nmr
## Min. : 6.0 Length:16 Min. : 2.0
## 1st Qu.:28.5 Class :character 1st Qu.: 7.5
## Median :51.0 Mode :character Median :13.0
## Mean :51.0 Mean :13.0
## 3rd Qu.:73.5 3rd Qu.:18.5
## Max. :96.0 Max. :24.0
3.4 Registros descartados en la fusión de los data frame
3.4.1 Punto de partida
El criterio para identificar y, en su caso, seleccionar los registros del el identificador Idl o IdN según los casos. En el caso considerado, los valores a tener en cuenta son:
- Data frames a fusionar
- dfLx:
nrow(dfLx)
–> 50 registros cuyo identificador IdL es parVIdL = dfLx$IdL
- 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100
- dfNy:
nrow(dfNy)
–> 33 registros cuyo identificador IdN es múltiplo de 3VIdN = dfNy$IdN
–>- 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99
- dfLx:
- Data frame resultante de la fusión
- dfFus01:
nrow(dfFus01)
–> 16 registros comunes a los dos data frames fusionadosVIdFus = dfFus01$IdL
–>- 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96
- dfFus01:
3.4.2 Registros de dfLtr no incluidos en el data frame dfFus01 de fusión
3.4.2.1 Identificación de los registros
Los registros de dfLtr descartados en la fusión, corresponden a aquellos cuyo IdL está en el vector VIdLx, pero no está en el vector VIdFus.
La función setdiff genera un vector con los elementos del primer vector que no están en el segundo
- Vector
VDifL = setdiff(VIdL, VIdFus)
- 2, 4, 8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98, 100
3.4.2.2 Selección de los registros
El vector VDifL contiene los identificadores de los registros de dfLx a seleccionar. El operador %in% permite seleccionar los registros cuyo identificador está incluido en el vector VDifL
Generación del data frame dfDifL con los registros de dfLtr no incluidos en dfFus01
dfDifL = dfLx[dfLx$IdL %in% VDifL,]
paste0("dfDifL[", nrow(dfDifL), " Filas, ", ncol(dfDifL), " Columnas]")
- dfDifL[34 Filas, 2 Columnas]
El data frame dfDifL resultante tiene 34 registros, correspondientes a los 50 registros de dfLx menos los 16 registros de dfFus01. Tiene 2 columnas, como el data frame dfLx del que se seleccionan los registros no fusionados.
summary(dfDifL)
print(dfDifL[1:10,])
## IdL Ltr
## Min. : 2.0 Length:34
## 1st Qu.: 26.5 Class :character
## Median : 51.0 Mode :character
## Mean : 51.0
## 3rd Qu.: 75.5
## Max. :100.0
## IdL Ltr
## 2 2 Coliflor
## 4 4 Agricultor
## 8 8 Agricultor
## 10 10 Coliflor
## 14 14 Coliflor
## 16 16 Agricultor
## 20 20 Agricultor
## 22 22 Coliflor
## 26 26 Coliflor
## 28 28 Agricultor
3.4.3 Registros de dfNmr no incluidos en el data frame dfFus01 de fusión
3.4.3.1 Identificación de los registros
Los registros de dfNmr descartados en la fusión, corresponden a aquellos cuyo IdN está en el vector VIdN, pero no está en el vector VIdFus.
La función setdiff genera un vector con los elementos del primer vector que no están en el segundo
- Vector
VDifN = setdiff(VIdN, VIdFus)
- 3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99
3.4.3.2 Selección de los registros
El vector VDifN contiene los identificadores de los registros de dfNy a seleccionar. El operador %in% permite seleccionar los registros cuyo identificador está incluido en el vector VDifN
Generación del data frame dfDifL con los registros de dfLtr no incluidos en dfFus01
dfDifN = dfNy[dfNy$IdN %in% VDifN,]
paste0("dfDifN[", nrow(dfDifN), " Filas, ", ncol(dfDifN), " Columnas]")
- dfDifN[17 Filas, 2 Columnas]
El data frame dfDifN resultante tiene 17 registros, correspondientes a los 33 registros de dfNy menos los 16 registros de dfFus01. Tiene 2 columnas, como el data frame dfNy del que se seleccionan los registros no fusionados.
summary(dfDifN)
print(dfDifN[1:10,])
## IdN Nmr
## Min. : 3 Min. : 1.00
## 1st Qu.:27 1st Qu.: 7.00
## Median :51 Median :13.00
## Mean :51 Mean :13.24
## 3rd Qu.:75 3rd Qu.:19.00
## Max. :99 Max. :25.00
## IdN Nmr
## 3 3 1
## 9 9 3
## 15 15 4
## 21 21 6
## 27 27 7
## 33 33 9
## 39 39 10
## 45 45 12
## 51 51 13
## 57 57 15