Capítulo 2 Generación de data frames

2.1 Introducción

Se generan dos data frames para en los capítulos posteriores comparar y fusionar data frames.

Las fases del proceso son:

El resultado son dos data frames, dfLtr y dfNmr, con 100 registros cada uno y dos columnas:

  • La primera columna contiene los códigos de identificación de los registros, es común a los dos data frames. Esta primera columna se denomina IdL en dfLtr e IdN en dfNmr
  • La segunda columna es específica de cada data frame
    • En dfLtr se denomina Ltr y es de tipo character
    • En dfNmr se denomina Nmr y es de tipo numérico

2.2 Generación de dos data frames dfLrt y dfNmr de 100 registros, en ambos casos identificados con un código único del 1 al 100

2.2.1 Generación de data frames vacios

Para generar un data frame se utiliza la función data.frame(). Si no se especifica ningún valor para los parámetros de la función, se genera un data frame vacio.

La función admite datos de entrada, características de las filas y columanas, etc. Aquí o aquí se pueden ver algunas posibilidades.

Se generan dos data frames vacíos a los que después se añadirán datos.

2.2.1.1 Data frame dfLtr vacío

dfLtr = data.frame()
  • paste0("dfLtr[", nrow(dfLtr), " Filas, ", ncol(dfLtr), " Columnas]")
    • dfLtr[0 Filas, 0 Columnas]

2.2.1.2 Data frame dfNmr vacío

dfNmr = data.frame()
  • paste0("dfNmr[", nrow(dfNmr), " Filas, ", ncol(dfNmr), " Columnas]")
    • dfNmr[0 Filas, 0 Columnas]

2.2.2 Añadido de columna de códigos de identificación

Se añade una columna de identificador del registro común a los dos data frames. Está columna servirá después de referencia para fusionar los data frames.

Para añadir un vector a una columna de un data frame vacío es necesario identificar el intervalo de filas y el número de la columna.

Se utiliza el el operador “:” para generar una serie de números desde el 1 al 100.

2.2.2.1 Data frame dfLtr con la columna de identificadores

dfLtr[1:100, 1] = 1:100
  • paste0("dfLtr[", nrow(dfLtr), " Filas, ", ncol(dfLtr), " Columnas]")
    • dfLtr[100 Filas, 1 Columnas]
dfLtr[1:10,]
summary(dfLtr)
##  [1]  1  2  3  4  5  6  7  8  9 10
##        V1        
##  Min.   :  1.00  
##  1st Qu.: 25.75  
##  Median : 50.50  
##  Mean   : 50.50  
##  3rd Qu.: 75.25  
##  Max.   :100.00

2.2.2.2 Data frame dfNmr con la columna de identificadores

dfLtr[1:100, 1] = 1:100
  • paste0("dfNmr[", nrow(dfNmr), " Filas, ", ncol(dfNmr), " Columnas]")
    • dfNmr[100 Filas, 1 Columnas]
print(dfNmr[1:10,])
summary(dfNmr)
##  [1]  1  2  3  4  5  6  7  8  9 10
##        V1        
##  Min.   :  1.00  
##  1st Qu.: 25.75  
##  Median : 50.50  
##  Mean   : 50.50  
##  3rd Qu.: 75.25  
##  Max.   :100.00

2.2.3 Añadido de la columna específica de cada data frame

2.2.3.1 Data frame dfLtr

En el data frame dfLtr se añade una columna de tipo character. Se toma un vector de 4 elementos tipo character V01 = c(“Alcachofa,” “Coliflor,” “Adelante,” “Agricultor”)

Para la segunda columna del data frame dfLtr se utiliza la función rep() para generar una serie de 100 elementos repitiendo 25 veces los 4 elementos del vector V01:

dfLtr[1:100, 2] = rep(x = V01, times = 25)
  • paste0("dfLtr[", nrow(dfLtr), " Filas, ", ncol(dfLtr), " Columnas]")
    • dfLtr[100 Filas, 2 Columnas]

En este punto, el data frame dfLtr ya tiene dos columnas

print(dfLtr[1:10,])
summary(dfLtr)
##    V1         V2
## 1   1  Alcachofa
## 2   2   Coliflor
## 3   3   Adelante
## 4   4 Agricultor
## 5   5  Alcachofa
## 6   6   Coliflor
## 7   7   Adelante
## 8   8 Agricultor
## 9   9  Alcachofa
## 10 10   Coliflor
##        V1              V2           
##  Min.   :  1.00   Length:100        
##  1st Qu.: 25.75   Class :character  
##  Median : 50.50   Mode  :character  
##  Mean   : 50.50                     
##  3rd Qu.: 75.25                     
##  Max.   :100.00

2.2.3.2 Data frame dfNmr

Para la segunda columna del data frame dfNmr se utiliza la función rep() para generar una serie de 100 elementos repitiendo 4 veces cada uno de los elementos 1 a 25

dfNmr[1:100, 2] = rep(x = 1:25, each = 4)
  • paste0("dfNmr[", nrow(dfNmr), " Filas, ", ncol(dfNmr), " Columnas]")
    • dfNmr[100 Filas, 2 Columnas]

Al igual que en el caso anterior, en este punto el data frame dfNmr ya tiene dos columnas

print(dfNmr[1:10,])
summary(dfNmr)
##    V1 V2
## 1   1  1
## 2   2  1
## 3   3  1
## 4   4  1
## 5   5  2
## 6   6  2
## 7   7  2
## 8   8  2
## 9   9  3
## 10 10  3
##        V1               V2    
##  Min.   :  1.00   Min.   : 1  
##  1st Qu.: 25.75   1st Qu.: 7  
##  Median : 50.50   Median :13  
##  Mean   : 50.50   Mean   :13  
##  3rd Qu.: 75.25   3rd Qu.:19  
##  Max.   :100.00   Max.   :25

2.2.4 Cambio de los nombres de las columnas

En caso de no asignar nombres a las columnas, se asingan de forma automática.

La función colnamespermite:

  • Conocer los nombres de las columnas del data frame
  • Asignar nuevos nombres a las columnas del data frame

2.2.4.1 Data frame dfLtr

  • Nombres actuales de las columnas: colnames(dfLtr) –> V1, V2
  • Asignación de nuevos nombres: colnames(dfLtr) = c("IdL", "Ltr") –>
  • Comprobación del cambio de nombres: colnames(dfLtr) –> IdL, Ltr

2.2.4.2 Data frame dfNmb

  • Nombres actuales de las columnas: colnames(dfNmr) –> IdL, Ltr
  • Asignación de nuevos nombres: colnames(dfNmr) = c("IdN, "Nmr") –>
  • Comprobación del cambio de nombres: colnames(dfNmr) –> IdN, Nmr

A efectos de mostrar el funcionamiento de la función merge, se van a generar dos nuevos data frames, dfLx y dfLy.

2.3 Generación de dos data grames dfLx y dfNy con una parte de los registros de dfLtr y dfNmr respectivamente

2.3.1 Data frame dfLx

El data frame dfLx se genera a partir del data frame dfLtr, anteriormente generado. Se seleccionan los registros cuyo IdL es múltiplo de 2.

dfLx = dfLtr[seq(from = 2, to = 100, by = 2),]
##  [1]   2   4   6   8  10  12  14  16  18  20  22  24  26  28  30  32  34  36  38
## [20]  40  42  44  46  48  50  52  54  56  58  60  62  64  66  68  70  72  74  76
## [39]  78  80  82  84  86  88  90  92  94  96  98 100
  • paste0("dfLx[", nrow(dfLx), " Filas, ", ncol(dfLx), " Columnas]")
    • dfLx[50 Filas, 2 Columnas]

El data frame dfLx generado tiene 50 registros, correspondientes a los identificadores pares entre 0 y 100, y las mismas dos columanas que el data frame dfLtr de partida

print(dfLx[1:10,])
summary(dfLx)
##    IdL        Ltr
## 2    2   Coliflor
## 4    4 Agricultor
## 6    6   Coliflor
## 8    8 Agricultor
## 10  10   Coliflor
## 12  12 Agricultor
## 14  14   Coliflor
## 16  16 Agricultor
## 18  18   Coliflor
## 20  20 Agricultor
##       IdL            Ltr           
##  Min.   :  2.0   Length:50         
##  1st Qu.: 26.5   Class :character  
##  Median : 51.0   Mode  :character  
##  Mean   : 51.0                     
##  3rd Qu.: 75.5                     
##  Max.   :100.0

2.3.2 Data frame dfNy

El data frame dfLy se genera a partir del data frame dfLtr, anteriormente generado. Se seleccionan los registros cuyo IdL es múltiplo de 3.

dfNy = dfNmr[seq(from = 3, to = 100, by = 3),]
##  [1]  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
## [26] 78 81 84 87 90 93 96 99
  • paste0("dfNy[", nrow(dfNy), " Filas, ", ncol(dfNy), " Columnas]")
    • dfLx[33 Filas, 2 Columnas]

El data frame dfNx generado tiene 33 registros, correspondientes a los identificadores múltiplos de 3 entre 0 y 100, y las mismas dos columnas que el data frame dfNy de partida

print(dfNy[1:10,])
summary(dfNy)
##    IdN Nmr
## 3    3   1
## 6    6   2
## 9    9   3
## 12  12   3
## 15  15   4
## 18  18   5
## 21  21   6
## 24  24   6
## 27  27   7
## 30  30   8
##       IdN          Nmr       
##  Min.   : 3   Min.   : 1.00  
##  1st Qu.:27   1st Qu.: 7.00  
##  Median :51   Median :13.00  
##  Mean   :51   Mean   :13.12  
##  3rd Qu.:75   3rd Qu.:19.00  
##  Max.   :99   Max.   :25.00