R + análisis reproducible
R + reproducible analytics

R como Laboratorio Estadístico para Datos Limpios, Modelos y Decisiones

R as a Statistical Lab for Clean Data, Models, and Decisions

20 casos de uso prácticos para trabajar con datos en R: limpieza, análisis exploratorio, segmentación, visualización, pruebas estadísticas, modelos simples y reportes reproducibles.

20 practical R use cases for data work: cleaning, exploratory analysis, segmentation, visualization, statistical testing, simple models, and reproducible reporting.

¿Dónde encaja R en este mapa?

Si PowerShell es fuerte para automatizar tareas operativas y Python es excelente para integrar datos desde múltiples fuentes, R se destaca como una herramienta poderosa para entender el comportamiento de los datos: tendencias, distribuciones, patrones, grupos, relaciones y señales estadísticas.

R no es solamente para académicos. En un ambiente de BI, gobierno, educación, salud, recursos humanos o finanzas, puede servir como una capa analítica para validar hipótesis, preparar visualizaciones, crear modelos simples y documentar análisis de forma reproducible.

Where does R fit in this map?

If PowerShell is strong for operational automation and Python is excellent for integrating data from multiple sources, R stands out as a powerful tool for understanding data behavior: trends, distributions, patterns, groups, relationships, and statistical signals.

R is not only for academics. In BI, government, education, healthcare, human resources, or finance environments, it can serve as an analytical layer to validate hypotheses, prepare visualizations, create simple models, and document analysis in a reproducible way.

ExploraciónExploration

1. Ver la estructura real de una tabla

1. Inspect the real structure of a table

Antes de limpiar o analizar, R permite revisar tipos de datos, valores faltantes y forma general del dataset.

Before cleaning or analyzing, R helps inspect data types, missing values, and the overall shape of the dataset.

library(readr)
library(dplyr)

data <- read_csv("survey_results.csv")

glimpse(data)
summary(data)
LimpiezaCleaning

2. Limpiar columnas de texto con espacios y mayúsculas

2. Clean text columns with spaces and casing issues

Estandariza campos como departamento, programa o modalidad para evitar categorías duplicadas.

Standardize fields such as department, program, or modality to avoid duplicate categories.

library(stringr)

data <- data %>%
  mutate(
    department_clean = department %>%
      str_squish() %>%
      str_to_title()
  )
Valores faltantesMissing values

3. Medir el porcentaje de data faltante por columna

3. Measure missing data percentage by column

Sirve para saber qué variables son confiables y cuáles necesitan revisión antes de un dashboard.

Useful for knowing which variables are reliable and which ones need review before a dashboard.

missing_summary <- data %>%
  summarise(across(
    everything(),
    ~ mean(is.na(.)) * 100
  ))

missing_summary
DuplicadosDuplicates

4. Identificar registros duplicados por combinación

4. Identify duplicates by field combination

Detecta duplicados usando una combinación de campos, no solo un ID.

Detect duplicates using a combination of fields, not just one ID.

duplicates <- data %>%
  group_by(first_name, last_name, date_of_birth) %>%
  filter(n() > 1) %>%
  arrange(last_name, first_name)

duplicates
FechasDates

5. Crear variables de año, mes y trimestre

5. Create year, month, and quarter variables

Convierte una fecha en variables útiles para tendencias y análisis temporal.

Turn one date into useful variables for trend and time-based analysis.

library(lubridate)

data <- data %>%
  mutate(
    date_clean = mdy(transaction_date),
    year = year(date_clean),
    month = month(date_clean, label = TRUE),
    quarter = quarter(date_clean)
  )
ResumenSummary

6. Crear resumen estadístico por grupo

6. Create statistical summaries by group

Resume métricas por departamento, campus, programa o cualquier grupo administrativo.

Summarize metrics by department, campus, program, or any administrative group.

summary_by_dept <- data %>%
  group_by(department_clean) %>%
  summarise(
    records = n(),
    avg_score = mean(score, na.rm = TRUE),
    median_score = median(score, na.rm = TRUE)
  ) %>%
  arrange(desc(records))
VisualizaciónVisualization

7. Graficar distribución de una variable

7. Plot the distribution of a variable

Ayuda a ver si una métrica está concentrada, dispersa, sesgada o con valores extremos.

Helps reveal whether a metric is concentrated, dispersed, skewed, or affected by outliers.

library(ggplot2)

ggplot(data, aes(x = score)) +
  geom_histogram(bins = 30) +
  labs(
    title = "Score Distribution",
    x = "Score",
    y = "Records"
  )
OutliersOutliers

8. Detectar valores extremos con IQR

8. Detect outliers using IQR

Encuentra valores que se salen del comportamiento típico sin asumir una distribución normal.

Find values outside typical behavior without assuming a normal distribution.

q1 <- quantile(data$amount, 0.25, na.rm = TRUE)
q3 <- quantile(data$amount, 0.75, na.rm = TRUE)
iqr <- q3 - q1

outliers <- data %>%
  filter(amount < q1 - 1.5 * iqr | amount > q3 + 1.5 * iqr)
CruceJoining

9. Unir dos tablas por llave común

9. Join two tables by a common key

Combina una tabla de respuestas con una tabla maestra de empleados, estudiantes o cuentas.

Combine a response table with a master table of employees, students, or accounts.

master <- read_csv("employee_master.csv")

combined <- data %>%
  left_join(master, by = "employee_id")
AntijoinAnti-join

10. Encontrar registros que no cruzan

10. Find records that do not match

Detecta empleados, estudiantes o transacciones que aparecen en una tabla pero no en la maestra.

Detect employees, students, or transactions that appear in one table but not in the master table.

not_found <- data %>%
  anti_join(master, by = "employee_id")

not_found
Tablas dinámicasPivot tables

11. Crear una tabla tipo pivot

11. Create a pivot-style table

Genera una matriz resumida similar a Excel, útil para validar antes de Power BI.

Generate an Excel-like summary matrix, useful for validation before Power BI.

pivot_table <- data %>%
  count(department_clean, status) %>%
  tidyr::pivot_wider(
    names_from = status,
    values_from = n,
    values_fill = 0
  )
LikertLikert

12. Convertir respuestas Likert en números

12. Convert Likert responses into numbers

Transforma encuestas de opinión en valores numéricos para promedios y comparaciones.

Transform opinion surveys into numeric values for averages and comparisons.

likert_map <- c(
  "Strongly Disagree" = 1,
  "Disagree" = 2,
  "Neutral" = 3,
  "Agree" = 4,
  "Strongly Agree" = 5
)

data <- data %>%
  mutate(q1_score = recode(q1_response, !!!likert_map))
Texto abiertoOpen text

13. Contar palabras frecuentes en comentarios

13. Count frequent words in comments

Crea una primera lectura de temas repetidos en respuestas abiertas.

Create a first reading of repeated themes in open-ended responses.

library(tidytext)

word_counts <- data %>%
  unnest_tokens(word, comment) %>%
  anti_join(stop_words, by = "word") %>%
  count(word, sort = TRUE)

head(word_counts, 20)
CorrelaciónCorrelation

14. Medir relación entre dos variables

14. Measure relationship between two variables

Evalúa si dos métricas se mueven juntas, por ejemplo satisfacción y tiempo de respuesta.

Evaluate whether two metrics move together, such as satisfaction and response time.

correlation <- cor(
  data$satisfaction_score,
  data$response_time,
  use = "complete.obs"
)

correlation
Prueba estadísticaStatistical test

15. Comparar promedios entre dos grupos

15. Compare averages between two groups

Permite probar si la diferencia observada entre dos grupos puede ser significativa.

Test whether the observed difference between two groups may be statistically meaningful.

test_result <- t.test(
  score ~ training_received,
  data = data
)

test_result
Modelo simpleSimple model

16. Crear una regresión lineal básica

16. Create a basic linear regression

Modela una variable continua usando factores explicativos simples.

Model a continuous variable using simple explanatory factors.

model <- lm(
  satisfaction_score ~ response_time + training_hours,
  data = data
)

summary(model)
SegmentaciónSegmentation

17. Crear grupos por comportamiento con clustering

17. Create behavior groups using clustering

Agrupa registros parecidos según variables numéricas para descubrir segmentos.

Group similar records based on numeric variables to discover segments.

features <- data %>%
  select(score, response_time, training_hours) %>%
  na.omit() %>%
  scale()

set.seed(123)
clusters <- kmeans(features, centers = 3)

clusters$centers
Series de tiempoTime series

18. Analizar tendencia mensual

18. Analyze monthly trend

Convierte transacciones diarias en una vista mensual para detectar crecimiento, caída o estacionalidad.

Convert daily transactions into a monthly view to detect growth, decline, or seasonality.

monthly_trend <- data %>%
  mutate(month_start = floor_date(date_clean, "month")) %>%
  group_by(month_start) %>%
  summarise(total_amount = sum(amount, na.rm = TRUE))

ggplot(monthly_trend, aes(month_start, total_amount)) +
  geom_line() +
  labs(title = "Monthly Trend")
ExportaciónExport

19. Exportar resultados a Excel con múltiples hojas

19. Export results to Excel with multiple sheets

Entrega resultados limpios, resúmenes y excepciones en un solo archivo revisable.

Deliver clean results, summaries, and exceptions in one reviewable workbook.

library(writexl)

write_xlsx(
  list(
    Clean_Data = data,
    Missing_Summary = missing_summary,
    Duplicates = duplicates,
    Outliers = outliers
  ),
  "r_data_quality_report.xlsx"
)
Reporte reproducibleReproducible report

20. Crear un reporte reproducible en R Markdown

20. Create a reproducible R Markdown report

Documenta análisis, código, gráficos y conclusiones en un reporte que se puede volver a generar.

Document analysis, code, charts, and conclusions in a report that can be regenerated.

library(rmarkdown)

render(
  input = "analysis_report.Rmd",
  output_format = "html_document",
  output_file = "analysis_report.html"
)