Semana 05 — Lectura de Datos desde Múltiples Fuentes

Author

Pascual Mejia

Paquetes

library(readr)
library(readxl)
library(dplyr)
library(DBI)
library(RSQLite)

Parte 1 — Leer el CSV

Se especifican los tipos de columna manualmente con col_types. id_empleado queda como character y fecha_ingreso como date.

empleados <- 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")
  )
)

glimpse(empleados)
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-…

glimpse() confirma que id_empleado es <chr> y fecha_ingreso es <date>.


Parte 2 — Leer el Excel

Cada sheet se lee por separado y se agrega una columna anio antes de combinar con bind_rows().

sheet_2022 <- read_excel("empleados.xlsx", sheet = "2022") |>
  mutate(anio = 2022L)

sheet_2023 <- read_excel("empleados.xlsx", sheet = "2023") |>
  mutate(anio = 2023L)

empleados_excel <- bind_rows(sheet_2022, sheet_2023)

glimpse(empleados_excel)
Rows: 7
Columns: 5
$ id_empleado     <chr> "004", "009", "012", "017", "018", "008", "016"
$ nombre          <chr> "Luis García", "Lucía Blanco", "Ricardo Gómez", "Irene…
$ departamento    <chr> "RRHH", "RRHH", "Auditoría", "RRHH", "Finanzas", "Fina…
$ salario_mensual <dbl> 41000, 39000, 47000, 42000, 46000, 48000, 51000
$ anio            <int> 2022, 2022, 2022, 2022, 2022, 2023, 2023

Promedio de salario por departamento

promedio_depto <- empleados_excel |>
  group_by(departamento) |>
  summarise(
    n             = n(),
    salario_prom  = mean(salario_mensual, na.rm = TRUE),
    .groups       = "drop"
  ) |>
  arrange(desc(salario_prom))

promedio_depto
# A tibble: 3 × 3
  departamento     n salario_prom
  <chr>        <int>        <dbl>
1 Auditoría        2       49000 
2 Finanzas         2       47000 
3 RRHH             3       40667.

Parte 3 — Conectar a SQLite

Crear la conexión y escribir la tabla

con <- dbConnect(SQLite(), dbname = "empleados.db")

datos_sqlite <- tibble(
  id_empleado      = c("001", "008", "016", "019"),
  anio             = c(2022L, 2023L, 2023L, 2022L),
  monto_total_anio = c(696000, 576000, 612000, 864000)
)

dbWriteTable(con, "empleados_resumen", datos_sqlite, overwrite = TRUE)

Leer con filtro WHERE

resultado_2023 <- dbGetQuery(
  con,
  "SELECT * FROM empleados_resumen WHERE anio = 2023"
)

resultado_2023
  id_empleado anio monto_total_anio
1         008 2023           576000
2         016 2023           612000

Cerrar la conexión

dbDisconnect(con)

Los registros recuperados corresponden a los empleados cuyo anio es 2023, confirmando que la consulta SQL filtra correctamente.