Capítulo 3 Fusión de dos data frames

3.1 Contenido

En este apartado se desarrollan los siguientes temas:

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 mergepara 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 par
      • VIdL = 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 3
      • VIdN = 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
  • Data frame resultante de la fusión
    • dfFus01: nrow(dfFus01) –> 16 registros comunes a los dos data frames fusionados
      • VIdFus = dfFus01$IdL –>
        • 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96

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