# para leer spss
library(haven)
# para manipular datos
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ ggplot2 3.5.1 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidyr)
# para visualización
library(ggplot2)
library(stargazer)
##
## Please cite as:
##
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
# para archivos de excel
library(writexl)
library(haven)
library(purrr)
# Directorio donde están los archivos
ruta <- "EHPM SPSS 2014/"
# Obtener lista de archivos .sav en la carpeta
archivos_sav <- list.files(path = ruta, pattern = "\\.sav$", full.names = TRUE)
# Importar todos los archivos en una lista
lista_datos <- map(archivos_sav, read_sav)
# Asignar nombres a la lista basados en los nombres de archivo (sin extensión)
nombres_archivos <- tools::file_path_sans_ext(basename(archivos_sav))
names(lista_datos) <- nombres_archivos
# Obtener etiquetas de variables para cada archivo
etiquetas_variables <- map(lista_datos, function(df) {
map(df, attr, "label")
})
# Mostrar etiquetas del primer archivo como ejemplo
etiquetas_variables[[1]]
## $EDICION
## [1] "Año de levantamiento"
##
## $LOTE
## [1] "Lote"
##
## $TIPO
## [1] "Tipo"
##
## $FOLIO
## [1] "Folio"
##
## $VIV
## [1] "Vivienda"
##
## $r03
## [1] "Hogares que realizaron viajes con fines de ocio o negocio durante los últimos 3 meses"
##
## $r7
## [1] "Si al adquirir un bien o servicio no cumplen con lo estipulado en el contrato, ¿interpondría una denuncia en la defensoría del consumidor?"
##
## $r8
## [1] "Razón por la que no interpondría la denuncia"
##
## $r9
## [1] "Ante un alza de precios en la canasta básica, ¿interpondría la denuncia ante la defensoría del consumidor?"
##
## $r10
## [1] "Razón por la que no interpondría la denuncia"
##
## $R06
## [1] "Niño o niña menor de 18 años que su padre o madre no vive en el hogar"
##
## $R0401
## [1] "Viajes con pernoctación"
##
## $R0402
## [1] "Viajes de un día"
##
## $R0501
## [1] "Gasto en viajes con pernoctación"
##
## $R0502
## [1] "Gasto en viajes de un día"
##
## $R01A
## [1] "Hogar con algún miembro en el extranjero"
##
## $R01B
## [1] "Total miembros en el extranjero"
##
## $R01C
## [1] "Hombres en el extranjero"
##
## $R01D
## [1] "Mujeres en el extranjero"
##
## $R02A
## [1] "Hogar con pupilos"
##
## $R02B
## [1] "Total de pupilos"
##
## $R02C
## [1] "Hombres pupilos"
##
## $R02D
## [1] "Mujeres pupilas"
##
## $FAC00
## [1] "Factor de expansión"
# Extraer las etiquetas del primer archivo como un vector
etiquetas_vector <- unlist(etiquetas_variables[[1]])
# Ver el vector de etiquetas
print(etiquetas_vector)
## EDICION
## "Año de levantamiento"
## LOTE
## "Lote"
## TIPO
## "Tipo"
## FOLIO
## "Folio"
## VIV
## "Vivienda"
## r03
## "Hogares que realizaron viajes con fines de ocio o negocio durante los últimos 3 meses"
## r7
## "Si al adquirir un bien o servicio no cumplen con lo estipulado en el contrato, ¿interpondría una denuncia en la defensoría del consumidor?"
## r8
## "Razón por la que no interpondría la denuncia"
## r9
## "Ante un alza de precios en la canasta básica, ¿interpondría la denuncia ante la defensoría del consumidor?"
## r10
## "Razón por la que no interpondría la denuncia"
## R06
## "Niño o niña menor de 18 años que su padre o madre no vive en el hogar"
## R0401
## "Viajes con pernoctación"
## R0402
## "Viajes de un día"
## R0501
## "Gasto en viajes con pernoctación"
## R0502
## "Gasto en viajes de un día"
## R01A
## "Hogar con algún miembro en el extranjero"
## R01B
## "Total miembros en el extranjero"
## R01C
## "Hombres en el extranjero"
## R01D
## "Mujeres en el extranjero"
## R02A
## "Hogar con pupilos"
## R02B
## "Total de pupilos"
## R02C
## "Hombres pupilos"
## R02D
## "Mujeres pupilas"
## FAC00
## "Factor de expansión"
# Seleccionar el primer archivo de la lista
data_ejemplo <- lista_datos[[1]]
# Obtener las etiquetas de las columnas
column_labels <- sapply(data_ejemplo, function(col) attr(col, "label"))
# Convertir a un vector de etiquetas
labels_vector <- sapply(column_labels, function(x) {
if (is.null(x)) {
return(NA) # Si no hay etiqueta, asigna NA
} else {
return(x) # Devuelve la etiqueta
}
})
# Convertir a tabla con nombres de columnas, etiquetas y conteo de datos no nulos
summary_table <- data_ejemplo %>%
summarise(across(everything(), ~ sum(!is.na(.)))) %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
mutate(Description = labels_vector[Variable]) %>%
filter(grepl("gasto", Description, ignore.case = TRUE)) %>%
select(Variable, Description, Non_Null_Count)
# Mostrar tabla
print(summary_table)
## # A tibble: 2 × 3
## Variable Description Non_Null_Count
## <chr> <chr> <int>
## 1 R0501 Gasto en viajes con pernoctación 283
## 2 R0502 Gasto en viajes de un día 758
# Cargar librerías necesarias
library(haven)
library(dplyr)
library(tidyr)
library(writexl)
# Definir la ruta donde están los archivos
ruta <- "EHPM SPSS 2014/"
# Definir los nombres de los archivos en la carpeta (sin necesidad de list.files)
archivos_sav <- c(
"SECCION 0 HOGAR.sav", "SECCION 0 PERSONA.sav", "SECCION 1 PERSONA.sav",
"SECCION 2 A PERSONA.sav", "SECCION 2 PERSONA.sav", "SECCION 3 HOGAR.sav",
"SECCION 4 PERSONA.sav", "SECCION 5 PERSONA.sav", "SECCION 6 PERSONA.sav",
"SECCION 7 HOGAR.sav", "SECCION 8A.sav", "SECCION 8B.sav"
)
# Inicializar una lista para almacenar los resultados
resultados <- list()
# Loop para procesar cada archivo
for (archivo in archivos_sav) {
# Construir la ruta completa del archivo
ruta_completa <- file.path(ruta, archivo)
# Leer el archivo SPSS
data <- read_sav(ruta_completa)
# Obtener las etiquetas de las columnas
column_labels <- sapply(data, function(col) attr(col, "label"))
# Convertir a vector de etiquetas
labels_vector <- sapply(column_labels, function(x) ifelse(is.null(x), NA, x))
# Crear tabla resumen con conteo de valores no nulos
summary_table <- data %>%
summarise(across(everything(), ~ sum(!is.na(.)))) %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
mutate(Description = labels_vector[Variable]) %>%
filter(grepl("gasto", Description, ignore.case = TRUE)) %>%
select(Variable, Description, Non_Null_Count)
# Agregar la tabla a la lista de resultados con el nombre del archivo
resultados[[archivo]] <- summary_table
}
# Unir todas las tablas en un solo data frame
resultados_unidos <- bind_rows(resultados, .id = "Archivo")
# Mostrar un resumen del resultado final
print(resultados_unidos)
## # A tibble: 106 × 4
## Archivo Variable Description Non_Null_Count
## <chr> <chr> <chr> <int>
## 1 SECCION 0 HOGAR.sav R0501 Gasto en viajes con pernoctaci… 283
## 2 SECCION 0 HOGAR.sav R0502 Gasto en viajes de un día 758
## 3 SECCION 2 PERSONA.sav R2231 Gasto anual en matrícula 22126
## 4 SECCION 2 PERSONA.sav R2234 Otro gasto en matrícula 0
## 5 SECCION 2 PERSONA.sav R2241 Gasto mensual en cuota escolar 22126
## 6 SECCION 2 PERSONA.sav R2244 Otro gasto en cuota escolar 2
## 7 SECCION 2 PERSONA.sav R223A1 Gasto anual en útiles 22126
## 8 SECCION 2 PERSONA.sav R223A4 Otro gasto en útiles 19
## 9 SECCION 2 PERSONA.sav R223B1 Gasto anual en uniformes 22126
## 10 SECCION 2 PERSONA.sav R223B4 Otro gasto en uniformes 2
## # ℹ 96 more rows
# Guardar el resultado en un archivo Excel
write_xlsx(resultados_unidos, "Resumen_Gastos.xlsx")
# Cargar librerías necesarias
library(haven)
library(dplyr)
library(tidyr)
library(writexl)
# Definir la ruta donde están los archivos
ruta <- "EHPM SPSS 2014/"
# Definir los nombres de los archivos en la carpeta (sin necesidad de list.files)
archivos_sav <- c(
"SECCION 0 HOGAR.sav", "SECCION 0 PERSONA.sav", "SECCION 1 PERSONA.sav",
"SECCION 2 A PERSONA.sav", "SECCION 2 PERSONA.sav", "SECCION 3 HOGAR.sav",
"SECCION 4 PERSONA.sav", "SECCION 5 PERSONA.sav", "SECCION 6 PERSONA.sav",
"SECCION 7 HOGAR.sav", "SECCION 8A.sav", "SECCION 8B.sav"
)
# Inicializar una lista para almacenar los resultados
resultados <- list()
# Loop para procesar cada archivo
for (archivo in archivos_sav) {
# Construir la ruta completa del archivo
ruta_completa <- file.path(ruta, archivo)
# Leer el archivo SPSS
data <- read_sav(ruta_completa)
# Filtrar solo columnas numéricas excluyendo variables binarias (0 y 1)
data <- data %>% select(where(is.numeric)) %>%
select(where(~ length(unique(.)) > 2))
# Obtener las etiquetas de las columnas
column_labels <- sapply(data, function(col) attr(col, "label"))
# Convertir a vector de etiquetas asegurando que sean caracteres
labels_vector <- sapply(column_labels, function(x) ifelse(is.null(x), "", as.character(x)))
# Crear tabla resumen con conteo de valores no nulos
summary_table <- data %>%
summarise(across(everything(), ~ sum(!is.na(.)))) %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Non_Null_Count") %>%
mutate(Description = labels_vector[Variable]) %>%
filter(grepl("gasto", Description, ignore.case = TRUE)) %>%
select(Variable, Description, Non_Null_Count)
# Asegurar que la columna Description es de tipo character
summary_table$Description <- as.character(summary_table$Description)
# Agregar la tabla a la lista de resultados con el nombre del archivo
resultados[[archivo]] <- summary_table
}
# Unir todas las tablas en un solo data frame
resultados_unidos <- bind_rows(resultados, .id = "Archivo")
# Mostrar un resumen del resultado final
print(resultados_unidos)
## # A tibble: 103 × 4
## Archivo Variable Description Non_Null_Count
## <chr> <chr> <chr> <int>
## 1 SECCION 0 HOGAR.sav R0501 Gasto en viajes con pernoctaci… 283
## 2 SECCION 0 HOGAR.sav R0502 Gasto en viajes de un día 758
## 3 SECCION 2 PERSONA.sav R2231 Gasto anual en matrícula 22126
## 4 SECCION 2 PERSONA.sav R2241 Gasto mensual en cuota escolar 22126
## 5 SECCION 2 PERSONA.sav R2244 Otro gasto en cuota escolar 2
## 6 SECCION 2 PERSONA.sav R223A1 Gasto anual en útiles 22126
## 7 SECCION 2 PERSONA.sav R223A4 Otro gasto en útiles 19
## 8 SECCION 2 PERSONA.sav R223B1 Gasto anual en uniformes 22126
## 9 SECCION 2 PERSONA.sav R223B4 Otro gasto en uniformes 2
## 10 SECCION 2 PERSONA.sav R223C1 Gasto anual en textos 22126
## # ℹ 93 more rows
# Guardar el resultado en un archivo Excel
write_xlsx(resultados_unidos, "Resumen_Gastos.xlsx")
```