En este instructivo veremos cómo etiquetar variables categóricas y cómo recodificar variables en el R.
En primer lugar, importaremos el módulo 1 de la ENAHO 2017, usando el comando read_sav del paquete haven
library(haven)
enaho17_m1 <- as.data.frame(read_sav("Enaho01-2017-100.sav"))
Si queremos poner las etiquetas a la variable “DOMINIO”, hay que convertir la variable original a un factor y luego proceder a etiquetarla. Como regla general, se recomienda no alterar la variable original y más bien grabar las transformaciones en una nueva variable. Las etiquetas deben ir en el orden indicado por el libro de códigos correspondiente.
table(enaho17_m1$DOMINIO)
##
## 1 2 3 4 5 6 7 8
## 5539 3811 2887 2897 7692 6458 8827 5434
enaho17_m1$dominio <- factor(enaho17_m1$DOMINIO,
labels = c("Costa Norte", "Costa Centro", "Costa Sur",
"Sierra Norte", "Sierra Centro",
"Sierra Sur", "Selva", "Lima Metropolitana"))
table(enaho17_m1$dominio)
##
## Costa Norte Costa Centro Costa Sur
## 5539 3811 2887
## Sierra Norte Sierra Centro Sierra Sur
## 2897 7692 6458
## Selva Lima Metropolitana
## 8827 5434
Podemos recodificar variables de diferentes maneras. Por ejemplo, a partir de la variable DOMINIO, podemos crear otra variable que agrupe los dominios en cuatro categorías: costa, sierra, selva y Lima Metropolitana.
Los corchetes nos permiten seleccionar grupos de casos o grupos de variables para realizar determinados procedimientos. En nuestro caso, para recodificar DOMINIO en cuatro regiones, podemos hacer lo siguiente:
enaho17_m1$region1[enaho17_m1$DOMINIO <= 3] <- 1
enaho17_m1$region1[enaho17_m1$DOMINIO >=4 & enaho17_m1$DOMINIO <=6] <- 2
enaho17_m1$region1[enaho17_m1$DOMINIO == 7] <- 3
enaho17_m1$region1[enaho17_m1$DOMINIO == 8] <- 4
table(enaho17_m1$region1)
##
## 1 2 3 4
## 12237 17047 8827 5434
Luego podemos etiquetar la nueva variable:
enaho17_m1$region1 <- factor(enaho17_m1$region1,
labels = c("Costa", "Sierra", "Selva",
"Lima Metropolitana"))
El comando recode se encuentra en el paquete car y resulta muy útil para recodificar variables:
library(car)
enaho17_m1$region2 <- recode(enaho17_m1$DOMINIO, "1:3=1; 4:6=2; 7=3; 8=4")
table(enaho17_m1$region2)
##
## 1 2 3 4
## 12237 17047 8827 5434
Luego se puede etiquetar la nueva varible usando el procedimiento anterior, sin embargo también es posible hacerlo integrando los comandos en una sola línea de sintaxis:
enaho17_m1$region2 <- factor(recode(enaho17_m1$DOMINIO, "1:3=1; 4:6=2; 7=3; 8=4"),
labels = c("Costa", "Sierra", "Selva",
"Lima Metropolitana"))
table(enaho17_m1$region2)
##
## Costa Sierra Selva
## 12237 17047 8827
## Lima Metropolitana
## 5434
El módulo 1 tiene algunas variables sobre gastos del hogar en determinados servicios (pregunta 117). Podemos calcular cuál es el monto total que gastan los hogares en internet (P117_14) creando una variable que sume los montos pagados por algún miembro del hogar o donados o regalados por otra persona (para los códigos exactos de la variable es necesario ver el diccionario de datos):
enaho17_m1$internet <- (enaho17_m1$`P1172$14`+enaho17_m1$`P1173$14`)
summary(enaho17_m1$internet)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.00 35.00 50.00 56.99 70.00 340.00 35586
Con el comando “summaryBy” del paquete “doBy”, podemos pedir la media del gasto en internet por grandes áreas geográficas:
library(doBy)
summaryBy(internet ~ region2, data = enaho17_m1,
FUN = mean, na.rm=TRUE)
## region2 internet.mean
## 1 Costa 53.38160
## 2 Sierra 53.76478
## 3 Selva 51.69510
## 4 Lima Metropolitana 66.77627