Capítulo 5 Comprobar presencia o ausencia de un registros en un data frame con información adicional
5.1 Planteamiento
- Dado un data frame de referencia con un listado de registros identificados por un código único.
- Dado otros data frames con información adicional de todos o algunos de los registros inluidos en el data frame de referencia identificados con el mísmo código único.
- Interesa incluir en el data frame de referencia, información sobre que elementos de este data frame de referencia tienen información adicional y cuales no.
5.2 Datos de partida
Se dispone de los siguientes data frames:
- dfFus: Data frame de referencia con el lisado completo de los registros
- dfLx: Data frame con información adicional de un determinado grupo de registros.
- dfNy: Data frame con información adicional de un grupo de otro grupo de registros.
Características:
- Todos los registros incluidos en dfLx y todos los registros incluidos en dfNy, están incluidos en dfFus
- Hay registros de dfFus que no están ni en dfLx ni en dfNy
- Hay registros que están incluidos en dfLx y en dfNy
- Hay registros que estań en dfLx o en dfNy pero no en ambos
5.3 Información adicional en dfLx
Los códigos de los registros que tienen información adicional en dfLx están identificados en dfLx$IdL.
Se genera el vector con estos valores: VInL = dfLx$Idl
En el data frame de referencia dfFus, se añade una nueva columna:
- Se le asigna el nombre test L = TeL
- El valor es de tipo TRUE/FALSE, con el siguiente criterio
- Si el registro está incluido en VInL –> TRUE
- Si el registro NO está incluido en VInL –> FALSE
Código:
dfFus$TeL = FALSE: Se genera la nueva columna y se le asigna FALSE como valor por defecto- dfFus$TeL[dfFus$IdL %in% VInL] = TRUE: Se utiliza el operador %in% asignar el valor TRUE a dfFus\(TeL cuando identificador dfFus\)IdL está incluido en el vector VInL
dfFus$TeL = FALSE
dfFus$TeL[dfFus$IdL %in% VInL] = TRUE
## IdL Ltr Nmr TeL
## 1 1 Alcachofa 1 FALSE
## 2 2 Coliflor 1 TRUE
## 3 3 Adelante 1 FALSE
## 4 4 Agricultor 1 TRUE
## 5 5 Alcachofa 2 FALSE
## 6 6 Coliflor 2 TRUE
## 7 7 Adelante 2 FALSE
## 8 8 Agricultor 2 TRUE
## 9 9 Alcachofa 3 FALSE
## 10 10 Coliflor 3 TRUE
## 11 11 Adelante 3 FALSE
## 12 12 Agricultor 3 TRUE
## 13 13 Alcachofa 4 FALSE
## 14 14 Coliflor 4 TRUE
## 15 15 Adelante 4 FALSE
## 16 16 Agricultor 4 TRUE
## 17 17 Alcachofa 5 FALSE
## 18 18 Coliflor 5 TRUE
## 19 19 Adelante 5 FALSE
## 20 20 Agricultor 5 TRUE
## 21 21 Alcachofa 6 FALSE
## 22 22 Coliflor 6 TRUE
## 23 23 Adelante 6 FALSE
## 24 24 Agricultor 6 TRUE
## 25 25 Alcachofa 7 FALSE
## 26 26 Coliflor 7 TRUE
## 27 27 Adelante 7 FALSE
## 28 28 Agricultor 7 TRUE
## 29 29 Alcachofa 8 FALSE
## 30 30 Coliflor 8 TRUE
## 31 31 Adelante 8 FALSE
## 32 32 Agricultor 8 TRUE
## 33 33 Alcachofa 9 FALSE
## 34 34 Coliflor 9 TRUE
## 35 35 Adelante 9 FALSE
## 36 36 Agricultor 9 TRUE
## 37 37 Alcachofa 10 FALSE
## 38 38 Coliflor 10 TRUE
## 39 39 Adelante 10 FALSE
## 40 40 Agricultor 10 TRUE
## 41 41 Alcachofa 11 FALSE
## 42 42 Coliflor 11 TRUE
## 43 43 Adelante 11 FALSE
## 44 44 Agricultor 11 TRUE
## 45 45 Alcachofa 12 FALSE
## 46 46 Coliflor 12 TRUE
## 47 47 Adelante 12 FALSE
## 48 48 Agricultor 12 TRUE
## 49 49 Alcachofa 13 FALSE
## 50 50 Coliflor 13 TRUE
## 51 51 Adelante 13 FALSE
## 52 52 Agricultor 13 TRUE
## 53 53 Alcachofa 14 FALSE
## 54 54 Coliflor 14 TRUE
## 55 55 Adelante 14 FALSE
## 56 56 Agricultor 14 TRUE
## 57 57 Alcachofa 15 FALSE
## 58 58 Coliflor 15 TRUE
## 59 59 Adelante 15 FALSE
## 60 60 Agricultor 15 TRUE
## 61 61 Alcachofa 16 FALSE
## 62 62 Coliflor 16 TRUE
## 63 63 Adelante 16 FALSE
## 64 64 Agricultor 16 TRUE
## 65 65 Alcachofa 17 FALSE
## 66 66 Coliflor 17 TRUE
## 67 67 Adelante 17 FALSE
## 68 68 Agricultor 17 TRUE
## 69 69 Alcachofa 18 FALSE
## 70 70 Coliflor 18 TRUE
## 71 71 Adelante 18 FALSE
## 72 72 Agricultor 18 TRUE
## 73 73 Alcachofa 19 FALSE
## 74 74 Coliflor 19 TRUE
## 75 75 Adelante 19 FALSE
## 76 76 Agricultor 19 TRUE
## 77 77 Alcachofa 20 FALSE
## 78 78 Coliflor 20 TRUE
## 79 79 Adelante 20 FALSE
## 80 80 Agricultor 20 TRUE
## 81 81 Alcachofa 21 FALSE
## 82 82 Coliflor 21 TRUE
## 83 83 Adelante 21 FALSE
## 84 84 Agricultor 21 TRUE
## 85 85 Alcachofa 22 FALSE
## 86 86 Coliflor 22 TRUE
## 87 87 Adelante 22 FALSE
## 88 88 Agricultor 22 TRUE
## 89 89 Alcachofa 23 FALSE
## 90 90 Coliflor 23 TRUE
## 91 91 Adelante 23 FALSE
## 92 92 Agricultor 23 TRUE
## 93 93 Alcachofa 24 FALSE
## 94 94 Coliflor 24 TRUE
## 95 95 Adelante 24 FALSE
## 96 96 Agricultor 24 TRUE
## 97 97 Alcachofa 25 FALSE
## 98 98 Coliflor 25 TRUE
## 99 99 Adelante 25 FALSE
## 100 100 Agricultor 25 TRUE
5.4 Información adicional en dfNy
Los códigos de los registros que tienen información adicional en dfLx están identificados en dfNy$IdN.
Se genera el vector con estos valores: VInN = dfNy$IdN
En el data frame de referencia dfFus, se añade una nueva columna:
- Se le asigna el nombre test N = TeN
- El valor es de tipo TRUE/FALSE, con el siguiente criterio
- Si el registro está incluido en VInN –> TRUE
- Si el registro NO está incluido en VInN –> FALSE
## IdL Ltr Nmr TeL TeN
## 1 1 Alcachofa 1 FALSE FALSE
## 2 2 Coliflor 1 TRUE FALSE
## 3 3 Adelante 1 FALSE TRUE
## 4 4 Agricultor 1 TRUE FALSE
## 5 5 Alcachofa 2 FALSE FALSE
## 6 6 Coliflor 2 TRUE TRUE
## 7 7 Adelante 2 FALSE FALSE
## 8 8 Agricultor 2 TRUE FALSE
## 9 9 Alcachofa 3 FALSE TRUE
## 10 10 Coliflor 3 TRUE FALSE
## 11 11 Adelante 3 FALSE FALSE
## 12 12 Agricultor 3 TRUE TRUE
## 13 13 Alcachofa 4 FALSE FALSE
## 14 14 Coliflor 4 TRUE FALSE
## 15 15 Adelante 4 FALSE TRUE
## 16 16 Agricultor 4 TRUE FALSE
## 17 17 Alcachofa 5 FALSE FALSE
## 18 18 Coliflor 5 TRUE TRUE
## 19 19 Adelante 5 FALSE FALSE
## 20 20 Agricultor 5 TRUE FALSE
## 21 21 Alcachofa 6 FALSE TRUE
## 22 22 Coliflor 6 TRUE FALSE
## 23 23 Adelante 6 FALSE FALSE
## 24 24 Agricultor 6 TRUE TRUE
## 25 25 Alcachofa 7 FALSE FALSE
## 26 26 Coliflor 7 TRUE FALSE
## 27 27 Adelante 7 FALSE TRUE
## 28 28 Agricultor 7 TRUE FALSE
## 29 29 Alcachofa 8 FALSE FALSE
## 30 30 Coliflor 8 TRUE TRUE
## 31 31 Adelante 8 FALSE FALSE
## 32 32 Agricultor 8 TRUE FALSE
## 33 33 Alcachofa 9 FALSE TRUE
## 34 34 Coliflor 9 TRUE FALSE
## 35 35 Adelante 9 FALSE FALSE
## 36 36 Agricultor 9 TRUE TRUE
## 37 37 Alcachofa 10 FALSE FALSE
## 38 38 Coliflor 10 TRUE FALSE
## 39 39 Adelante 10 FALSE TRUE
## 40 40 Agricultor 10 TRUE FALSE
## 41 41 Alcachofa 11 FALSE FALSE
## 42 42 Coliflor 11 TRUE TRUE
## 43 43 Adelante 11 FALSE FALSE
## 44 44 Agricultor 11 TRUE FALSE
## 45 45 Alcachofa 12 FALSE TRUE
## 46 46 Coliflor 12 TRUE FALSE
## 47 47 Adelante 12 FALSE FALSE
## 48 48 Agricultor 12 TRUE TRUE
## 49 49 Alcachofa 13 FALSE FALSE
## 50 50 Coliflor 13 TRUE FALSE
## 51 51 Adelante 13 FALSE TRUE
## 52 52 Agricultor 13 TRUE FALSE
## 53 53 Alcachofa 14 FALSE FALSE
## 54 54 Coliflor 14 TRUE TRUE
## 55 55 Adelante 14 FALSE FALSE
## 56 56 Agricultor 14 TRUE FALSE
## 57 57 Alcachofa 15 FALSE TRUE
## 58 58 Coliflor 15 TRUE FALSE
## 59 59 Adelante 15 FALSE FALSE
## 60 60 Agricultor 15 TRUE TRUE
## 61 61 Alcachofa 16 FALSE FALSE
## 62 62 Coliflor 16 TRUE FALSE
## 63 63 Adelante 16 FALSE TRUE
## 64 64 Agricultor 16 TRUE FALSE
## 65 65 Alcachofa 17 FALSE FALSE
## 66 66 Coliflor 17 TRUE TRUE
## 67 67 Adelante 17 FALSE FALSE
## 68 68 Agricultor 17 TRUE FALSE
## 69 69 Alcachofa 18 FALSE TRUE
## 70 70 Coliflor 18 TRUE FALSE
## 71 71 Adelante 18 FALSE FALSE
## 72 72 Agricultor 18 TRUE TRUE
## 73 73 Alcachofa 19 FALSE FALSE
## 74 74 Coliflor 19 TRUE FALSE
## 75 75 Adelante 19 FALSE TRUE
## 76 76 Agricultor 19 TRUE FALSE
## 77 77 Alcachofa 20 FALSE FALSE
## 78 78 Coliflor 20 TRUE TRUE
## 79 79 Adelante 20 FALSE FALSE
## 80 80 Agricultor 20 TRUE FALSE
## 81 81 Alcachofa 21 FALSE TRUE
## 82 82 Coliflor 21 TRUE FALSE
## 83 83 Adelante 21 FALSE FALSE
## 84 84 Agricultor 21 TRUE TRUE
## 85 85 Alcachofa 22 FALSE FALSE
## 86 86 Coliflor 22 TRUE FALSE
## 87 87 Adelante 22 FALSE TRUE
## 88 88 Agricultor 22 TRUE FALSE
## 89 89 Alcachofa 23 FALSE FALSE
## 90 90 Coliflor 23 TRUE TRUE
## 91 91 Adelante 23 FALSE FALSE
## 92 92 Agricultor 23 TRUE FALSE
## 93 93 Alcachofa 24 FALSE TRUE
## 94 94 Coliflor 24 TRUE FALSE
## 95 95 Adelante 24 FALSE FALSE
## 96 96 Agricultor 24 TRUE TRUE
## 97 97 Alcachofa 25 FALSE FALSE
## 98 98 Coliflor 25 TRUE FALSE
## 99 99 Adelante 25 FALSE TRUE
## 100 100 Agricultor 25 TRUE FALSE
5 Generación de data frames vacios
Para generar un data frame se utiliza la función data.frame().
Si no se especifican 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.
Generamos dos data frames vacíos a los que después añadiremos datos y fusionaremos.
5.1 Data frame dfLtr vacío
dfLtr = data.frame()
paste0("dfLtr[", nrow(dfLtr), " Filas, ", ncol(dfLtr), " Columnas]")- dfLtr[0 Filas, 0 Columnas]
5.2 Data frame dfNmr vacío
dfNmr = data.frame()
paste0("dfNmr[", nrow(dfNmr), " Filas, ", ncol(dfNmr), " Columnas]")- dfNmr[0 Filas, 0 Columnas]
6 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 dos data frames.
La sintaxis para identificar las filas y columnas de un data frame es [filas, columnas]. Si el espacio correspondiente a las filas y/o columnas se deja en blanco, se toman todas las filas y/o todas las columnas respectivamente.
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.
Utilizamos el el operador “:” para generar una serie de números desde el 1 al 100.
6.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]
print(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
6.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
7 Añadido de la columna específica de cada data frame
7.1 Data frame dfLtr
En el data frame dfLtr añadimos una columna de tipo character. Tomamos un vector de 4 elementos tipo character V01 = c(“Alcachofa,” “Coliflor,” “Adelante,” “Agricultor”)
Para la segunda columna del data frame dfLtr utilizamos 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
7.2 Data frame dfNmr
Para la segunda columna del data frame dfNmr utilizamos 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
8 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
8.1 Data frame dfLtr
- Nombres actuales de las columnas:
colnames(dfLtr)–> V1, V2 - Asignación de nuevos nombres:
colnames(dfLtr) = c("IdL", "Ltr")–>
8.2 Data frame dfNmb
- Nombres actuales de las columnas:
colnames(dfNmr)–> IdL, Ltr - Asignación de nuevos nombres:
colnames(dfNmr) = c("IdN, "Nmr")–> `r - Asignación de nuevos nombres:
colnames(dfLtr) = c("IdL", "Ltr")–> colnames(dfNmr) = c(“IdN,” “Nmr”)` - Comprobación del cambio de nombres:
colnames(dfNmr)–> V1, V2