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"))

Etiquetar Variables

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

Recodificar Variables

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.

Alternativa 1: Usando los corchetes

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"))

Alternativa 2: Usando el comando recode

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

Calcular nuevas variables

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

Ejercicios