library(expss)
# Import .sav file preserving SPSS labels
survey_data <- expss::read_spss("data/encuesta.sav")2 Gestión de datos en R
2.1 De la encuesta al dataframe
El punto de partida de cualquier proyecto de investigación cuantitativa es un fichero de datos: la matriz que contiene las respuestas de todos los entrevistados a todas las preguntas del cuestionario. En R, esa matriz se denomina dataframe: una tabla donde cada fila es un caso (un entrevistado) y cada columna es una variable (una pregunta o un campo derivado).
Antes de realizar cualquier análisis, es necesario:
- Importar ese fichero a R correctamente.
- Revisar su estructura: qué variables hay, de qué tipo son y cuántos casos contiene.
- Asegurarse de que los tipos de variables son los adecuados para el análisis.
- Detectar y tratar valores perdidos.
- Aplicar ponderaciones si la muestra no es autoponderada.
Este capítulo cubre estos cinco pasos, que constituyen la base de cualquier análisis fiable.
2.2 Importar datos
Los ficheros con los que trabaja habitualmente el analista de mercados provienen de plataformas de recogida online (en formato .sav de SPSS, .xlsx o .csv) o de herramientas de tabulación. R permite leer todos estos formatos.
2.2.1 Ficheros SPSS (.sav)
El formato más habitual cuando se viene de un entorno SPSS es el fichero .sav. Se puede importar con el paquete expss, que además conserva las etiquetas de valor (value labels) y las etiquetas de variable (variable labels):
Alternativamente, el paquete haven también importa ficheros .sav con las etiquetas intactas:
library(haven)
# Import .sav with haven (tidyverse-compatible)
survey_data <- haven::read_sav("data/encuesta.sav")La diferencia principal: expss::read_spss() convierte directamente las etiquetas al formato que usa expss para tablas cruzadas; haven::read_sav() las conserva como atributos compatibles con tidyverse. La elección depende del flujo de trabajo posterior.
2.2.2 Ficheros CSV
El formato CSV es el más universal para intercambio de datos. Se importa con readr:
library(readr)
# Import CSV file
survey_data <- readr::read_csv("data/encuesta.csv")En ficheros generados en España o Latinoamérica, el separador decimal puede ser la coma y el separador de campos el punto y coma. En ese caso usar readr::read_csv2() o especificar locale = readr::locale(decimal_mark = ",").
2.2.3 Ficheros Excel (.xlsx)
library(readxl)
# Import first sheet of an Excel file
survey_data <- readxl::read_excel("data/encuesta.xlsx", sheet = 1)2.3 Revisar la estructura del dataframe
Una vez importado el fichero, el primer paso es inspeccionarlo. Las tres funciones más útiles para esto son:
# Number of rows and columns
dim(survey_data)
# Variable names, types and first values
dplyr::glimpse(survey_data)
# Summary statistics per variable
summary(survey_data)dplyr::glimpse() es especialmente informativa: muestra el número de filas y columnas, el tipo de cada variable (<dbl> para numérico, <chr> para texto, <fct> para factor, <lbl> para variables con etiquetas SPSS) y los primeros valores de cada una.
2.4 Tipos de variables en R
Cada variable en un dataframe tiene un tipo que condiciona cómo R la trata en los cálculos y en los gráficos. Es fundamental que el tipo sea el correcto antes de comenzar el análisis.
| Tipo R | Qué representa | Ejemplo |
|---|---|---|
numeric |
Variable cuantitativa continua o discreta | Edad, ingresos, puntuación |
factor |
Variable categórica (nominal u ordinal) | Sexo, nivel de estudios |
character |
Texto libre, sin categorías fijas | Respuesta abierta |
logical |
Verdadero / falso | ¿Tiene hijos? (TRUE/FALSE) |
En datos procedentes de SPSS, todas las variables suelen llegar como numéricas aunque representen categorías. Es necesario convertir las cualitativas a factor:
library(dplyr)
survey_data <- survey_data %>%
dplyr::mutate(
gender = factor(gender, levels = c(1, 2),
labels = c("Mujer", "Hombre")),
edu_level = factor(edu_level, levels = 1:4,
labels = c("Primaria", "Secundaria",
"Universitaria", "Posgrado"),
ordered = TRUE) # ordinal variable
)Para variables ordinales (nivel de acuerdo, frecuencia de uso, nivel educativo…) conviene usar ordered = TRUE al crear el factor. Esto permite que R las trate correctamente en ciertos análisis y visualizaciones.
2.5 Renombrar y seleccionar variables
Los nombres de variables que vienen de SPSS suelen ser crípticos (p1, p2a, v034). Renombrarlas mejora la legibilidad del código y reduce errores:
survey_data <- survey_data %>%
dplyr::rename(
age = p1,
gender = p2,
brand_pref = p3a,
satis = p10
)Si el fichero contiene variables que no van a usarse en el análisis (variables de control, identificadores internos, timestamps), conviene eliminarlas desde el principio:
survey_data <- survey_data %>%
dplyr::select(-c(internal_id, timestamp, interviewer_code))2.6 Recodificar variables
La recodificación es una operación habitual: convertir escalas, crear variables derivadas o agrupar categorías. Se realiza con dplyr::mutate() y dplyr::case_when():
survey_data <- survey_data %>%
dplyr::mutate(
# Recode a satisfaction scale (1-10) into three groups
satis_group = dplyr::case_when(
satis <= 4 ~ "Detractor",
satis <= 7 ~ "Pasivo",
satis >= 8 ~ "Promotor"
),
# Create a binary variable from age
senior = dplyr::if_else(age >= 55, "Yes", "No")
)2.7 Valores perdidos
Los valores perdidos se representan en R como NA. Detectarlos y gestionarlos correctamente es uno de los pasos más importantes de la preparación de datos. El capítulo siguiente los trata en profundidad; aquí se presenta el diagnóstico básico.
Para obtener un recuento rápido de NAs por variable:
# Count NAs per variable
colSums(is.na(survey_data))
# Percentage of NAs per variable
round(colMeans(is.na(survey_data)) * 100, 1)Para una vista más completa, el paquete naniar ofrece herramientas de visualización específicas para valores perdidos:
library(naniar)
# Visual summary of missing data
naniar::vis_miss(survey_data)2.8 Ponderación de la muestra
En investigación de mercados es habitual que la muestra no sea autoponderada: ciertos perfiles (por sexo, edad, comunidad autónoma…) están sobre o infrarrepresentados respecto a la población real. En ese caso, cada entrevistado lleva asociado un factor de ponderación (weight) que corrige ese desequilibrio.
En R, la forma más integrada de trabajar con ponderaciones en encuestas es con el paquete expss, que permite aplicar el peso en tablas cruzadas con expss::tab_weight():
library(expss)
# Apply weighting factor for cross-tabulation
survey_data %>%
expss::tab_weight(weight) %>%
expss::tab_cols(gender) %>%
expss::tab_rows(satis_group) %>%
expss::tab_stat_cpct() %>%
expss::tab_pivot()na.rm = TRUE con ponderaciones
Al calcular medias o sumas sobre variables ponderadas, recordar siempre incluir na.rm = TRUE para evitar que los NA devuelvan un resultado vacío.
2.9 Exportar datos preparados
Una vez depurado el fichero, conviene guardarlo en un formato que permita retomarlo sin repetir todo el proceso de preparación. Las opciones más habituales:
# Save as R native format (fastest, preserves all R types)
saveRDS(survey_data, "data/survey_clean.rds")
# Read it back
survey_data <- readRDS("data/survey_clean.rds")
# Export to CSV (for sharing with other tools)
readr::write_csv(survey_data, "data/survey_clean.csv")
# Export to SPSS format
haven::write_sav(survey_data, "data/survey_clean.sav")El formato .rds es el más eficiente para guardar objetos R: preserva los tipos de variables (factores, etiquetas, ordenados), ocupa menos espacio que CSV y se lee más rápido. Es la opción recomendada para los ficheros de trabajo internos.
2.10 Buenas prácticas de organización
Trabajar con documentos Quarto y R Projects facilita mantener el análisis organizado y reproducible. Algunas recomendaciones concretas:
- Usar RStudio Projects (
File > New Project) para que todos los ficheros del proyecto estén en el mismo directorio y las rutas sean relativas. - En
Tools > Global Options > General, desactivar “Restore .RData into workspace at startup” y “Save workspace to .RData on exit”. Esto obliga a que el análisis sea reproducible desde el script, no desde el estado guardado de la sesión. - Mantener una carpeta
data/con los datos originales (solo lectura) y otradata/processed/con los ficheros ya preparados. - Documentar en el propio fichero
.qmdcualquier decisión de recodificación o exclusión de casos, de modo que quede trazable.
2.11 Consideraciones éticas en el manejo de datos
El trabajo con datos de encuesta implica responsabilidades éticas que van más allá de la calidad técnica del análisis.
Privacidad y anonimización: los datos de personas individuales deben anonimizarse antes de ser compartidos o publicados. Esto implica eliminar identificadores directos (nombre, DNI, email) e indirectos (combinaciones de variables que permitan identificar a alguien).
Consentimiento informado: los datos deben haberse recogido con el consentimiento explícito de los participantes y solo pueden usarse para los fines comunicados en el momento de la recogida.
Marco legal: en España y la Unión Europea, el tratamiento de datos personales está regulado por el Reglamento General de Protección de Datos (RGPD). Los proyectos de investigación deben cumplir con sus requisitos de licitud, minimización y limitación de la finalidad.
Transparencia metodológica: la ISO 20252 regula los estándares de calidad en investigación de mercados y obliga a documentar de forma transparente los procesos de recogida, procesamiento y análisis de datos. El uso de documentos Quarto reproducibles es una práctica alineada con este estándar.
Para las normas específicas del sector en España, la referencia es I+A Spain, la asociación de empresas y profesionales de la investigación.