La clase pasada cerramos la parte práctica instalando el paquete Tidyverse. Sin embargo, al hacerlo no estaban instalando solo un paquete, sino una colección de paquetes de R que están diseñados para el análisis de datos.
La lógica de tener estos paquetes juntos es que todos ellos comparten la misma filosofía, gramática, y estructuras de datos.
Los principales paquetes que están en este mundo son
magrittr
: que introduce la pipe
(%>%)dplyr
: orientado a la maniplulación de bases de
datostidyr
: para la limpieza de datosreadr
: para la lectura de bases de datospurr
: provee herramientas para trabajar con funciones
sobre vectoresstringr
: orientado a facilitar el trabajo con datos de
textoforcats
: orientado a facilitar el trabajo con
factoresPara empezar a trabajar con el paquete, tenemos que introducirlo en
la sesión con la función library()
:
library(tidyverse)
library(readr)
library(eph)
Más arriba mencionamos que el paquete magrittr
introduce
la pipe y la señalamos como este símbolo %>%
. La pipe es
una forma de escribir del mundo tidyverse, que indica
que vamos a realizar de terminada operación sobre el objeto que está a
la izquierda. Sirve para indicar una secuencia de acciones.
Para desarrollar los ejemplos de esta clase, vamos a trabajar con
datos de la Encuesta Permanente de Hogares. Para ello, usaremos el
paquete eph
. Por ahora, lo único que vamos a usar de él es
la función get_microdata()
, que nos devuelve la base de
microdatos de individuos o hogares para el trimestre seleccionado:
df <- get_microdata(year=2023, trimester=3, type='individual')
df <- organize_labels(df=df, type='individual') # Vamos a etiquetar la base
df$NRO_HOGAR <- as.character(df$NRO_HOGAR)
table(df$CAT_OCUP)
##
## 0 Patron
## 25844 766
## Cuenta propia Obrero o empleado
## 4673 16968
## Trabajador familiar sin remuneracion Ns./Nr..
## 82 2
¿Qué les parece que hace esta línea?
df$NRO_HOGAR <- as.character(df$NRO_HOGAR)
Ahora, con una pipe…
df$CAT_OCUP %>%
table()
## .
## 0 Patron
## 25844 766
## Cuenta propia Obrero o empleado
## 4673 16968
## Trabajador familiar sin remuneracion Ns./Nr..
## 82 2
Las funciones pueden concatenarse, y esta es la principal gracia del uso de las pipes.
df$CAT_OCUP%>%
table()%>%
prop.table()%>%
round(., 2)
## .
## 0 Patron
## 0.53 0.02
## Cuenta propia Obrero o empleado
## 0.10 0.35
## Trabajador familiar sin remuneracion Ns./Nr..
## 0.00 0.00
¿Cómo obtendrían la tabla anterior sin usar %>%
? O
sea en R-base…
###
Vimos que este paquete de tidyverse está orientado al manejo de bases de datos. Tiene 5 funciones básicas que resuelven el 90% de nuestros problemas a la hora de limpiar y procesas bases:
select()
: que selecciona y descarta variablesfilter()
: selecciona y descarta según filasarrange()
: reordena las filasmutate()
: crea o edita variablesrename()
: renombra variablessummarise()
: colapsa los valores a un solo resumenTodas pueden ser usadas en conjunto con group_by()
que
cambia el objeto de cada función: en lugar de operar sobre todo el
dataset, lo hace al interior de cada grupo definido.
select()
:
select_prueba_1 <- df %>% select(CODUSU, CH03:CH09)
head(select_prueba_1)
## # A tibble: 6 × 8
## CODUSU CH03 CH04 CH05 CH06 CH07 CH08 CH09
## <labelled> <labelled> <label> <lab> <lab> <lab> <lab> <lab>
## 1 TQRMNOPSSHJOKSCDEFOCD00804371 3 2 02/1… 10 5 1 1
## 2 TQSMNORWTHJMKTCDEFOCD00804372 1 1 01/0… 51 2 1 1
## 3 TQSMNORWTHJMKTCDEFOCD00804372 3 2 20/0… 17 5 1 1
## 4 TQSMNORWTHJMKTCDEFOCD00804372 2 2 01/0… 51 2 1 1
## 5 TQRMNOSQQHMMKUCDEIMBF00813017 1 2 24/0… 31 1 4 1
## 6 TQRMNOSQQHMMKUCDEIMBF00813017 2 1 16/0… 29 1 4 1
select_prueba_2 <- df %>% select(3:6)
head(select_prueba_2)
## # A tibble: 6 × 4
## TRIMESTRE NRO_HOGAR COMPONENTE H15
## <labelled> <chr> <labelled> <labelled>
## 1 3 1 5 1
## 2 3 1 1 1
## 3 3 1 3 1
## 4 3 1 2 1
## 5 3 1 1 1
## 6 3 1 2 1
select_prueba_3 <- df %>% select(-c(ANO4:TRIMESTRE))
head(select_prueba_3)
## # A tibble: 6 × 175
## CODUSU NRO_HOGAR COMPONENTE H15 REGION MAS_500 AGLOMERADO PONDERA CH03
## <labelled> <chr> <labelled> <lab> <labe> <label> <labelled> <label> <lab>
## 1 TQRMNOPSSH… 1 5 1 41 N 8 341 3
## 2 TQSMNORWTH… 1 1 1 41 N 8 339 1
## 3 TQSMNORWTH… 1 3 1 41 N 8 339 3
## 4 TQSMNORWTH… 1 2 1 41 N 8 339 2
## 5 TQRMNOSQQH… 1 1 1 43 N 36 143 1
## 6 TQRMNOSQQH… 1 2 1 43 N 36 143 2
## # ℹ 166 more variables: CH04 <labelled>, CH05 <labelled>, CH06 <labelled>,
## # CH07 <labelled>, CH08 <labelled>, CH09 <labelled>, CH10 <labelled>,
## # CH11 <labelled>, CH12 <labelled>, CH13 <labelled>, CH14 <labelled>,
## # CH15 <labelled>, CH15_COD <labelled>, CH16 <labelled>, CH16_COD <labelled>,
## # NIVEL_ED <labelled>, ESTADO <labelled>, CAT_OCUP <labelled>,
## # CAT_INAC <labelled>, IMPUTA <labelled>, PP02C1 <labelled>,
## # PP02C2 <labelled>, PP02C3 <labelled>, PP02C4 <labelled>, …
starts_with
: selecciona columnas que empiecen con el
string que pasemos.ends_with
: selecciona columnas que terminen con el
string que le pasemos.contains
: selecciona columnas que contengan la palabra
que indicamos.select_prueba_4 <- df %>% select(starts_with("CH"))
head(select_prueba_4)
## # A tibble: 6 × 16
## CH03 CH04 CH05 CH06 CH07 CH08 CH09 CH10 CH11 CH12 CH13 CH14 CH15
## <labe> <lab> <lab> <lab> <lab> <lab> <lab> <lab> <lab> <lab> <lab> <lab> <lab>
## 1 3 2 02/1… 10 5 1 1 1 1 2 2 4 1
## 2 1 1 01/0… 51 2 1 1 2 0 6 1 <NA> 2
## 3 3 2 20/0… 17 5 1 1 1 1 4 2 4 1
## 4 2 2 01/0… 51 2 1 1 2 0 2 1 <NA> 1
## 5 1 2 24/0… 31 1 4 1 2 0 3 1 <NA> 1
## 6 2 1 16/0… 29 1 4 1 2 0 5 1 <NA> 1
## # ℹ 3 more variables: CH15_COD <labelled>, CH16 <labelled>, CH16_COD <labelled>
select_prueba_5 <- df %>% select(contains("CAT"))
head(select_prueba_5)
## # A tibble: 6 × 2
## CAT_OCUP CAT_INAC
## <labelled> <labelled>
## 1 0 3
## 2 3 0
## 3 0 3
## 4 0 4
## 5 0 4
## 6 2 0
rename()
NOMBRE_NUEVO = NOMBRE_VIEJO
df <- df %>% rename(sexo = CH04)
table(df$sexo)
##
## Varon Mujer
## 23161 25174
rename_with()
para
cambiarle el nombre a una selección de columnas:df %>% rename_with(tolower, starts_with("CH"))
## # A tibble: 48,335 × 177
## CODUSU ANO4 TRIMESTRE NRO_HOGAR COMPONENTE H15 REGION MAS_500 AGLOMERADO
## <labell> <lab> <labelle> <chr> <labelled> <lab> <labe> <label> <labelled>
## 1 TQRMNOP… 2023 3 1 5 1 41 N 8
## 2 TQSMNOR… 2023 3 1 1 1 41 N 8
## 3 TQSMNOR… 2023 3 1 3 1 41 N 8
## 4 TQSMNOR… 2023 3 1 2 1 41 N 8
## 5 TQRMNOS… 2023 3 1 1 1 43 N 36
## 6 TQRMNOS… 2023 3 1 2 1 43 N 36
## 7 TQRMNOS… 2023 3 1 3 1 43 N 36
## 8 TQRMNOS… 2023 3 1 4 1 43 N 36
## 9 TQRMNOR… 2023 3 1 1 1 43 N 36
## 10 TQRMNOR… 2023 3 1 2 1 43 N 36
## # ℹ 48,325 more rows
## # ℹ 168 more variables: PONDERA <labelled>, ch03 <labelled>, sexo <labelled>,
## # ch05 <labelled>, ch06 <labelled>, ch07 <labelled>, ch08 <labelled>,
## # ch09 <labelled>, ch10 <labelled>, ch11 <labelled>, ch12 <labelled>,
## # ch13 <labelled>, ch14 <labelled>, ch15 <labelled>, ch15_cod <labelled>,
## # ch16 <labelled>, ch16_cod <labelled>, NIVEL_ED <labelled>,
## # ESTADO <labelled>, CAT_OCUP <labelled>, CAT_INAC <labelled>, …
arrange()
df %>% arrange(CH06) %>% select(CH06)
## # A tibble: 48,335 × 1
## CH06
## <labelled>
## 1 -1
## 2 -1
## 3 -1
## 4 -1
## 5 -1
## 6 -1
## 7 -1
## 8 -1
## 9 -1
## 10 -1
## # ℹ 48,325 more rows
desc()
para reordenar por una columna en orden
descendente:df %>% arrange(desc(CH06)) %>% select(CH06)
## # A tibble: 48,335 × 1
## CH06
## <labelled>
## 1 108
## 2 102
## 3 100
## 4 99
## 5 99
## 6 99
## 7 99
## 8 99
## 9 99
## 10 99
## # ℹ 48,325 more rows
filter()
filter(CONDICIÓN)
Supongamos que queremos quedarnos con los registros de mujeres:
base_filtrada_1 <- df %>% filter(sexo == 2)
table(base_filtrada_1$sexo)
##
## Mujer
## 25174
Por ejemplo, supongamos que queremos obtener los registros aquellas personas mayores de 25:
base_filtrada_2 <- df %>% filter(CH06> 25)
table(base_filtrada_2$CH06)
##
## 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
## 742 718 719 665 727 699 760 680 637 636 662 653 636 640 679 597 699 728 682 739
## 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
## 648 640 594 616 591 545 555 563 487 484 488 486 495 465 479 479 445 472 404 424
## 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
## 424 403 412 372 384 333 344 301 291 310 241 208 240 170 179 154 140 132 117 92
## 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 102 108
## 83 78 51 51 47 33 31 27 14 11 8 5 6 9 1 1 1
Los condicionales también pueden combinarse. Podríamos traer todas las mujeres mayores de 25:
base_filtrada_3 <- df %>% filter(sexo == 2 | CH06 > 25)
dim(base_filtrada_3)
## [1] 38889 177
Ahora bien, ¿cómo hacemos si queremos los registros solo las mujeres desocupadas e inactivas?
base_filtrada_4 <- df %>% filter(ESTADO %in% c(2, 3) & sexo == 2)
table(base_filtrada_4$ESTADO, base_filtrada_4$sexo)
##
## Mujer
## Desocupado 579
## Inactivo 11882
%in%
es una forma de indicar que vamos a buscar los
valores del vector en la columna que indicamos. Sería lo mismo que
hacer:
base_filtrada_4 <- df %>% filter((ESTADO == 2 & sexo == 2) | (ESTADO == 3 & sexo == 2))
Pero de manera simplificada.
El filtrado también puede aplicarse sobre columnas para quedarnos sólo con las filas que tienen valores -es decir, borrar los NA.
Vamos a borrar los casos que tienen NA en el ultimo año de cursada
aprobado. Probemos que pasa si usamos el operador ==
base_filtrada_4 <- df %>% filter(CH14 != NA) %>% select(CH14)
nrow(base_filtrada_4)
## [1] 0
¡Nos borró todas las variables! Pero esto no está bien, ya que vimos que esta columna tenía varios valores. ¿Qué sucedió?
Resulta que los NA son bastante tramposos en R. Casi cualquier
operación con uno de ellos va a devolver otro NA, y es por esto que no
debemos trabajar con operadores a la hora de filtrarlos, sino que
debemos usar la función is.na()
base_filtrada_5 <- df %>% filter(!is.na(CH14)) %>% select(CH14)
nrow(base_filtrada_5)
## [1] 24411
mutate()
mutate(nombre_de_la_columna = valores_de_la_columna)
Por ejemplo, podemos crear una columna simple con el nombre de la base:
mutate_1 <- df %>% mutate(columna_ejemplo = "EPH 2do trim 2020")
head(mutate_1)
## # A tibble: 6 × 178
## CODUSU ANO4 TRIMESTRE NRO_HOGAR COMPONENTE H15 REGION MAS_500 AGLOMERADO
## <labelle> <lab> <labelle> <chr> <labelled> <lab> <labe> <label> <labelled>
## 1 TQRMNOPS… 2023 3 1 5 1 41 N 8
## 2 TQSMNORW… 2023 3 1 1 1 41 N 8
## 3 TQSMNORW… 2023 3 1 3 1 41 N 8
## 4 TQSMNORW… 2023 3 1 2 1 41 N 8
## 5 TQRMNOSQ… 2023 3 1 1 1 43 N 36
## 6 TQRMNOSQ… 2023 3 1 2 1 43 N 36
## # ℹ 169 more variables: PONDERA <labelled>, CH03 <labelled>, sexo <labelled>,
## # CH05 <labelled>, CH06 <labelled>, CH07 <labelled>, CH08 <labelled>,
## # CH09 <labelled>, CH10 <labelled>, CH11 <labelled>, CH12 <labelled>,
## # CH13 <labelled>, CH14 <labelled>, CH15 <labelled>, CH15_COD <labelled>,
## # CH16 <labelled>, CH16_COD <labelled>, NIVEL_ED <labelled>,
## # ESTADO <labelled>, CAT_OCUP <labelled>, CAT_INAC <labelled>,
## # IMPUTA <labelled>, PP02C1 <labelled>, PP02C2 <labelled>, …
string
la columna de sexo para que aparezca
la etiqueta en lugar de números:mutate_2 <- df %>% mutate(sexo = as.character(sexo))
mutate_2 %>% select(sexo)
## # A tibble: 48,335 × 1
## sexo
## <chr>
## 1 Mujer
## 2 Varon
## 3 Mujer
## 4 Mujer
## 5 Mujer
## 6 Varon
## 7 Mujer
## 8 Mujer
## 9 Varon
## 10 Mujer
## # ℹ 48,325 more rows
mutate
y across()
para
editar varias variables al mismo tiempo:
mutate()
pasamos una segunda
función across()
donde indicamos el conjunto de columnas
que queremos modificar~
.x
para referirnos a la selección de
variables anteriordf <- df %>% mutate(across(c(CH03, sexo, CH07:CAT_INAC), ~as.character(.x)))
df %>% select(CH03:CAT_INAC)
## # A tibble: 48,335 × 20
## CH03 sexo CH05 CH06 CH07 CH08 CH09 CH10 CH11 CH12 CH13 CH14 CH15
## <chr> <chr> <lab> <lab> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Hijo… Mujer 02/1… 10 solt… Obra… Si Si, … Publ… Prim… No Cuar… En e…
## 2 Jefe… Varon 01/0… 51 casa… Obra… Si No a… 0 Terc… Si <NA> En o…
## 3 Hijo… Mujer 20/0… 17 solt… Obra… Si Si, … Publ… Secu… No Cuar… En e…
## 4 Cony… Mujer 01/0… 51 casa… Obra… Si No a… 0 Prim… Si <NA> En e…
## 5 Jefe… Mujer 24/0… 31 unid… No p… Si No a… 0 EGB Si <NA> En e…
## 6 Cony… Varon 16/0… 29 unid… No p… Si No a… 0 Poli… Si <NA> En e…
## 7 Hijo… Mujer 14/0… 12 solt… No p… Si Si, … Publ… EGB No Sexto En e…
## 8 Hijo… Mujer 07/1… 15 solt… No p… Si Si, … Publ… Poli… No Ning… En e…
## 9 Jefe… Varon 15/0… 35 unid… No p… Si No a… 0 Poli… Si <NA> En u…
## 10 Cony… Mujer 25/1… 32 unid… No p… Si No a… 0 EGB Si <NA> En u…
## # ℹ 48,325 more rows
## # ℹ 7 more variables: CH15_COD <chr>, CH16 <chr>, CH16_COD <chr>,
## # NIVEL_ED <chr>, ESTADO <chr>, CAT_OCUP <chr>, CAT_INAC <chr>
group_by
+ summarize()
group_by
cambia la unidad de análsis del dataset a
grupos. Así, al llamar a cualqyuer verbo de dplyr
se aplica
“por grupo”,summarize()
, nos permite hacer una
tabla con una medida resumen de las variables que querramos.Por ejemplo, podemos hacer el conteo de frecuencias del último año aprobado de escolaridad:
df %>%
group_by(CH14)%>%
summarize(n=n())
## # A tibble: 13 × 2
## CH14 n
## <chr> <int>
## 1 Cuarto 3259
## 2 Educacion especial 241
## 3 Ninguno 4240
## 4 Noveno 18
## 5 Ns/Nr. 468
## 6 Octavo 138
## 7 Primero 3874
## 8 Quinto 1944
## 9 Segundo 4878
## 10 Sexto 703
## 11 Siptimo 121
## 12 Tercero 4527
## 13 <NA> 23924
La media de edades según sexo:
df %>%
group_by(sexo)%>%
summarize(mean_edad=round(mean(CH06,na.rm=TRUE)))
## # A tibble: 2 × 2
## sexo mean_edad
## <chr> <dbl>
## 1 Mujer 37
## 2 Varon 34
pivot_longer
y pivot_wider
pivot_longer
“alarga” los datos convirtiendo columnas a
filas. Tiene los siguientes parámetros: + cols
: elijo las
columnas que quiero pasar a filas + names_to
: indico el
nombre de la columna que va a contener las variables elegidas +
values_to
: indico el nombre de la columna que va a contener
los valores de las variablesmedidas_resumen <- df %>%
group_by(sexo) %>%
summarise(media_edad = mean(CH06, na.rm = TRUE),
sd_edad = sd(CH06, na.rm = TRUE)) %>%
select(sexo,
media_edad, sd_edad)
pivot_longer_resumen <- medidas_resumen%>%
pivot_longer(cols = c(media_edad, sd_edad),
names_to = "variable",
values_to = "valor")
pivot_wider
es la operación inversa. Crea variables a
partir de filas, y “alarga” la base de datos. +id_cols
: la
columna de ID, que no queremos que pierda su formato
+names_from
: indico en qué columna están los nombres de las
variables
values_from
: indico en qué columna están los valores de
las variablespivot_longer_resumen %>%
pivot_wider(id_cols= sexo,
names_from=variable,
values_from = valor)
## # A tibble: 2 × 3
## sexo media_edad sd_edad
## <chr> <dbl> <dbl>
## 1 Mujer 37.1 22.5
## 2 Varon 34.3 21.6
join()
inner_join():
incluye todas las filas que estén en x e
y.left_join():
incluye todas las filas que estén en
x.right_join():
incluye todas las filas que estén en
y.full_join():
incluye todas las filas que estén en x o
y.Supongamos que queremos “joinear” la base que tenemos con las
variables de resumen del hogar (cantidad de personas en el hogar
IX_TOT
, las personas menores de 10 años
IX_MEN10
y las personas de 10 o más años de edad,
IX_MAYEQ10
). Todas estas variables están en la tabla de
hogares. La columna CODSU nos da un identificador único
de cada registro. De manera que podemos hacer un seguimiento de los
individuos en el hogar a través de esa columna:
df_2 <- get_microdata(year=2023, trimester=3, type='hogar') %>%
organize_labels(type='hogar') %>%
mutate(NRO_HOGAR = as.character(NRO_HOGAR))
df_2 <- df_2 %>%
select(CODUSU, NRO_HOGAR, IX_TOT:IX_MAYEQ10) # Selecciono únicamente las variables de ID y las variables de resumen del hogar
df_merged <- df %>% left_join(df_2, by = c("CODUSU", "NRO_HOGAR"))
Ahora podemos chequear el resultado revisando los nombres de columnas que se agregaron a la tabla.
colnames(df_merged)
## [1] "CODUSU" "ANO4" "TRIMESTRE" "NRO_HOGAR" "COMPONENTE"
## [6] "H15" "REGION" "MAS_500" "AGLOMERADO" "PONDERA"
## [11] "CH03" "sexo" "CH05" "CH06" "CH07"
## [16] "CH08" "CH09" "CH10" "CH11" "CH12"
## [21] "CH13" "CH14" "CH15" "CH15_COD" "CH16"
## [26] "CH16_COD" "NIVEL_ED" "ESTADO" "CAT_OCUP" "CAT_INAC"
## [31] "IMPUTA" "PP02C1" "PP02C2" "PP02C3" "PP02C4"
## [36] "PP02C5" "PP02C6" "PP02C7" "PP02C8" "PP02E"
## [41] "PP02H" "PP02I" "PP03C" "PP03D" "PP3E_TOT"
## [46] "PP3F_TOT" "PP03G" "PP03H" "PP03I" "PP03J"
## [51] "INTENSI" "PP04A" "PP04B_COD" "PP04B1" "PP04B2"
## [56] "PP04B3_MES" "PP04B3_ANO" "PP04B3_DIA" "PP04C" "PP04C99"
## [61] "PP04D_COD" "PP04G" "PP05B2_MES" "PP05B2_ANO" "PP05B2_DIA"
## [66] "PP05C_1" "PP05C_2" "PP05C_3" "PP05E" "PP05F"
## [71] "PP05H" "PP06A" "PP06C" "PP06D" "PP06E"
## [76] "PP06H" "PP07A" "PP07C" "PP07D" "PP07E"
## [81] "PP07F1" "PP07F2" "PP07F3" "PP07F4" "PP07F5"
## [86] "PP07G1" "PP07G2" "PP07G3" "PP07G4" "PP07G_59"
## [91] "PP07H" "PP07I" "PP07J" "PP07K" "PP08D1"
## [96] "PP08D4" "PP08F1" "PP08F2" "PP08J1" "PP08J2"
## [101] "PP08J3" "PP09A" "PP09A_ESP" "PP09B" "PP09C"
## [106] "PP09C_ESP" "PP10A" "PP10C" "PP10D" "PP10E"
## [111] "PP11A" "PP11B_COD" "PP11B1" "PP11B2_MES" "PP11B2_ANO"
## [116] "PP11B2_DIA" "PP11C" "PP11C99" "PP11D_COD" "PP11G_ANO"
## [121] "PP11G_MES" "PP11G_DIA" "PP11L" "PP11L1" "PP11M"
## [126] "PP11N" "PP11O" "PP11P" "PP11Q" "PP11R"
## [131] "PP11S" "PP11T" "P21" "DECOCUR" "IDECOCUR"
## [136] "RDECOCUR" "GDECOCUR" "PDECOCUR" "ADECOCUR" "PONDIIO"
## [141] "TOT_P12" "P47T" "DECINDR" "IDECINDR" "RDECINDR"
## [146] "GDECINDR" "PDECINDR" "ADECINDR" "PONDII" "V2_M"
## [151] "V3_M" "V4_M" "V5_M" "V8_M" "V9_M"
## [156] "V10_M" "V11_M" "V12_M" "V18_M" "V19_AM"
## [161] "V21_M" "T_VI" "ITF" "DECIFR" "IDECIFR"
## [166] "RDECIFR" "GDECIFR" "PDECIFR" "ADECIFR" "IPCF"
## [171] "DECCFR" "IDECCFR" "RDECCFR" "GDECCFR" "PDECCFR"
## [176] "ADECCFR" "PONDIH" "IX_TOT" "IX_MEN10" "IX_MAYEQ10"
IX_TOT
IX_MEN10
IX_MAYEQ10
ITF
) de la tabla de hogar y chequeen los resultados con la
misma variable que ya existe en la tabla de individuos.