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 dfFusTeLcuandoidentificadordfFusIdL 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.
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 colnames
permite:
- 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