Ejercicio Práctico de la Semana 5

Author

Maddox Cruz

Published

June 12, 2026

library(readr)
library(readxl)
library(writexl)
library(DBI)
library(RSQLite)
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

Leer el CSV

empleados_csv <- read_csv(
  "empleados.csv",
  col_types = cols(
    id_empleado = col_character(),
    nombre = col_character(),
    departamento = col_character(),
    salario_mensual = col_double(),
    fecha_ingreso = col_date(format = "%Y-%m-%d")
  )
)

# Para verificar la estructura
glimpse(empleados_csv)
Rows: 20
Columns: 5
$ id_empleado     <chr> "001", "002", "003", "004", "005", "006", "007", "008"…
$ nombre          <chr> "Ana Torres", "Pedro Méndez", "María López", "Luis Gar…
$ departamento    <chr> "Tecnología", "Auditoría", "Tecnología", "RRHH", "Audi…
$ salario_mensual <dbl> 58000, 45000, 63000, 41000, 52000, 70000, 65000, 48000…
$ fecha_ingreso   <date> 2019-03-15, 2021-07-01, 2018-11-20, 2022-01-10, 2020-…

Leer el Excel

# Leer los dos sheets de manera independiente
excel_2022 <- read_excel("empleados.xlsx", sheet = "2022") %>% mutate(año = 2022)
excel_2023 <- read_excel("empleados.xlsx", sheet = "2023") %>% mutate(año = 2023)

# Combinar ambos en un solo tibble
empleados_excel <- bind_rows(excel_2022, excel_2023)

# Mostrar resultado combinado
print(empleados_excel)
# A tibble: 4 × 3
  id_empleado salario   año
  <chr>         <dbl> <dbl>
1 001           50000  2022
2 002           42000  2022
3 001           55000  2023
4 002           45000  2023
# Calcular el promedio de salario por departamento (usando los datos del CSV)
promedio_depto <- empleados_csv %>%
  group_by(departamento) %>%
  summarise(
    promedio_salario = mean(salario_mensual, na.rm = TRUE),
    total_empleados = n()
  )

print(promedio_depto)
# A tibble: 5 × 3
  departamento promedio_salario total_empleados
  <chr>                   <dbl>           <int>
1 Auditoría              48750                4
2 Finanzas               49000                3
3 RRHH                   40667.               3
4 Riesgo                 62250                4
5 Tecnología             63167.               6

Conectar a SQLite

con <- dbConnect(SQLite(), "empleados_db.sqlite")

# Definir el tibble/dataframe para la tabla de la base de datos
datos_historicos <- data.frame(
  id_empleado = c("001", "002", "003", "004"),
  anio = c(2022, 2023, 2022, 2023),
  monto_total_año = c(696000, 540000, 756000, 492000)
)

# Escribir la tabla en la base de datos
dbWriteTable(con, "empleados", datos_historicos, overwrite = TRUE)

# Leer de vuelta usando una consulta SQL con WHERE
resultado_query <- dbGetQuery(con, "SELECT * FROM empleados WHERE anio = 2023")

# Mostrar el resultado de la consulta
print(resultado_query)
  id_empleado anio monto_total_año
1         002 2023          540000
2         004 2023          492000
# Desconectar de la base de datos
dbDisconnect(con)

Análisis

Este ejercicio práctico implementa un pipeline de ingeniería de datos de tres capas, el cual demuestra cómo R puede consolidar información dispersa al integrar fuentes planas (CSV), estructuradas (Excel multipestaña) y relacionales (SQLite). A través de este flujo, se resuelven desafíos críticos del mundo real como la preservación de metadatos (evitando la pérdida de ceros a la izquierda en los identificadores mediante la coerción de tipos), la unificación de históricos segmentados por años y el almacenamiento eficiente en bases de datos locales para consultas optimizadas mediante SQL.