De acuerdo a la información en los datos abiertos, hay 28 conjuntos de datos, uno a nivel vivienda y el resto a nivel individuo:
Vivienda: tviv
Individual: tsdem - toda la población
Individual - persona elegida: desde la sección III
Es muy raro que analicemos TODA la base de datos. Trabajaremos con el fusionado de vivienda, demográfico, sección III y sección de violencia en al ámbito laboral.
Pero… vamos a automatizar el proceso. Para eso primero repasemos sobre funciones y bucles
Mi primera función
Unos de los elementos más poderosos de R es hacer nuestra propias funciones.
La estructura de archivos es muy consistente en los datos abiertos. Vamos a utilizar además una función llamada “paste()” que ayuda a pegar cadenas, que la había mostrado arriba
a<-"Hola"b<-"¿Cómo estás?"paste(a, b, sep=" ")
[1] "Hola ¿Cómo estás?"
Esto será muy útil para crear nuestra función
Por ejemplo revisemos la liga para importar los datos de la tabla “TVIV”
Rows: 122646 Columns: 35
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (16): ID_VIV, UPM, VIV_SEL, CVE_ENT, NOM_ENT, CVE_MUN, NOM_MUN, COD_RES,...
dbl (19): P1_1, P1_4_1, P1_4_2, P1_4_3, P1_4_4, P1_4_5, P1_4_6, P1_4_7, P1_4...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Ojo esta función también depende de cd0 y cd1, por lo que habría que declararlo antes. O bien, incluye los objetos dentro de la función, como lo hicimos con path. Nota que ese objeto no está en nuestro ambiente.
Vamos a usar el el índice de las tablas para importar todas con un loop
Rows: 28 Columns: 2
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): Nombre de archivo, Título de Tablas
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Revisemos este índice
head(indice_tablas)
# A tibble: 6 × 2
nombre_de_archivo titulo_de_tablas
<chr> <chr>
1 conjunto_de_datos_TVIV Características de la Vivienda y Hogares en la V…
2 conjunto_de_datos_TSDem Características Sociodemográficas de Residentes …
3 conjunto_de_datos_TB_SEC_III Elegibilidad y Verificación de Situación Conyuga…
4 conjunto_de_datos_TB_SEC_IV Situación de la Relación de Pareja/ Ingresos y R…
5 conjunto_de_datos_TB_SEC_V Consentimiento y Privacidad
6 conjunto_de_datos_TB_SEC_VI Opinión Sobre los Roles Masculinos y Femeninos
# A tibble: 6 × 2
nombre_de_archivo titulo_de_tablas
<chr> <chr>
1 TVIV Características de la Vivienda y Hogares en la Vivienda
2 TSDem Características Sociodemográficas de Residentes de la Vivie…
3 TB_SEC_III Elegibilidad y Verificación de Situación Conyugal de la Muj…
4 TB_SEC_IV Situación de la Relación de Pareja/ Ingresos y Recursos
5 TB_SEC_V Consentimiento y Privacidad
6 TB_SEC_VI Opinión Sobre los Roles Masculinos y Femeninos
Vamos a importar todos los conjuntos!
Creamos un vector con las tablas que queremos importar:
Rows: 64 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Loop para importar diccionarios
Creamos un vector con las tablas que queremos importar:
for(i in tablas) { y<-importar2(tabla=i, elemento="diccionario_de_datos") # se importa la baseassign(paste0("DICC_",i), y) # asigna el nombre al objeto y}
Rows: 68 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 107 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 64 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 427 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 1488 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Cuidado con estos diccionarios. Hay varios instrumentos entonces se repiten.
for(i in tablas) { y<-importar2(tabla=i, elemento="diccionario_de_datos") %>%# se importa la baseselect(NOMBRE_CAMPO:TIPO) %>%unique()assign(paste0("DICC_",i), y) # asigna el nombre al objeto y}
Rows: 68 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 107 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 64 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 427 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 1488 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): NOMBRE_CAMPO, NEMONICO, TIPO, RANGO_CLAVES
dbl (1): LONGITUD
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
for (i in DICC_TB_SEC_III$NEMONICO) { TB_SEC_III[[i]]<-sjlabelled::set_label(TB_SEC_III[[i]], label=DICC_TB_SEC_III[DICC_TB_SEC_III$NEMONICO==i,]$NOMBRE_CAMPO)}
for (i in DICC_TB_SEC_IV$NEMONICO) { TB_SEC_IV[[i]]<-sjlabelled::set_label(TB_SEC_IV[[i]], label=DICC_TB_SEC_IV[DICC_TB_SEC_IV$NEMONICO==i,]$NOMBRE_CAMPO)}
Importación de catalagos
Aquí hay una pequeña complicación, hay un archivo por preguntar. Para esto nos servirán las funciones de dir()
Vamos a etiquetar, ojo las variables de “id” no se etiquetan en valores.
vars<-cat_TB_SEC_III[c(1:8, 14:25)]for (i in vars) { x <- readr::read_csv(paste0(cd3,"/",i,".csv"),locale =locale(encoding ="latin1")) %>%unique() TB_SEC_III[[i]]<-as.numeric(TB_SEC_III[[i]]) TB_SEC_III[[i]]<-set_labels(TB_SEC_III[[i]], labels=x$descrip)}
Rows: 1 Columns: 2
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): CVE_ENT, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
More values in "x" than length of "labels". Additional values were added to labels.
Rows: 1 Columns: 2
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): CVE_MUN, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
More values in "x" than length of "labels". Additional values were added to labels.
Rows: 5 Columns: 2
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): DOMINIO, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Warning: NAs introducidos por coerción
More labels than values of "x". Using first 0 labels.
Rows: 4 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): ESTRATO, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.Rows: 1 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): EST_DIS, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More values in "x" than length of "labels". Additional values were added to labels.
Rows: 1 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): FAC_MUJ, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More values in "x" than length of "labels". Additional values were added to labels.
Rows: 1 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): FAC_VIV, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More values in "x" than length of "labels". Additional values were added to labels.
Rows: 1 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): HOGAR, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More values in "x" than length of "labels". Additional values were added to labels.
Rows: 6 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): descrip
dbl (1): P3_1
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.Rows: 3 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): P3_2, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More labels than values of "x". Using first 2 labels.
Rows: 8 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): P3_3, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More labels than values of "x". Using first 7 labels.
Rows: 3 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): P3_4, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More labels than values of "x". Using first 2 labels.
Rows: 3 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): P3_5, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More labels than values of "x". Using first 2 labels.
Rows: 5 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): P3_6, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More labels than values of "x". Using first 4 labels.
Rows: 3 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): P3_7, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More labels than values of "x". Using first 2 labels.
Rows: 6 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): P3_8, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Warning: NAs introducidos por coerción
More labels than values of "x". Using first 0 labels.
Rows: 6 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): T_INSTRUM, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Warning: NAs introducidos por coerción
More labels than values of "x". Using first 0 labels.
Rows: 1 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): UPM, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More values in "x" than length of "labels". Additional values were added to labels.
Rows: 5 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): UPM_DIS, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More values in "x" than length of "labels". Additional values were added to labels.
Rows: 1 Columns: 2── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): VIV_SEL, descrip
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.More values in "x" than length of "labels". Additional values were added to labels.
P3_1 n percent
vive en unión libre? 23597 0.21427080
está separada? 8628 0.07834591
está divorciada? 3173 0.02881219
es viuda? 9750 0.08853415
está casada? 44977 0.40841029
está soltera? 20002 0.18162667
Para que se guarden las etiquetas debemos usar los “join” de {dplyr}
Además esta base no tiene una sólo variable del id. Tiene un identificador compuesto. Podemos hacer un objeto tipo vector
endireh2021_ind<-TB_SEC_III %>%left_join(TB_SEC_IV, by="ID_PER") %>%select(-ends_with(".y")) %>%# quita todas las variables que terminan en .yrename_with(~ stringr::str_remove(.x, pattern =".x"), ends_with(".x")) %>%left_join(TB_SEC_VIII, by="ID_PER") %>%select(-ends_with(".y")) %>%# quita todas las variables que terminan en .yrename_with(~ stringr::str_remove(.x, pattern =".x"), ends_with(".x")) endireh2021_ind %>%names()
Hoy pegamos estas 110,127 mujeres al sociodemográfico
endireh2021<-endireh2021_ind %>%right_join(TSDem, by="ID_PER") %>%# ojo con el right ¿por qué?select(-ends_with(".x")) %>%# quita todas las variables que terminan en .xrename_with(~ stringr::str_remove(.x, pattern =".y"), ends_with(".y"))
Finalmente pegamos la vivienda.
endireh2021<-endireh2021 %>%right_join(TVIV, by="ID_VIV") %>%# ojo con el right ¿por qué?select(-ends_with(".x")) %>%# quita todas las variables que terminan en .xrename_with(~ stringr::str_remove(.x, pattern =".y"), ends_with(".y"))