Código
# Cargar las librerías necesarias
library(readr)
library(readxl)
library(dplyr)
library(DBI)
library(RSQLite)# Cargar las librerías necesarias
library(readr)
library(readxl)
library(dplyr)
library(DBI)
library(RSQLite)# 1. Leer el archivo CSV especificando los tipos de columnas manuales
empleados_csv <- read_csv(
"empleados.csv",
col_types = cols(
`ID-EMPLEADO` = col_character(),
NOMBRE = col_character(),
DEPARTAMENTO = col_character(),
`SALARIO MENSUAL` = col_character(), # Se lee como texto temporal debido a la coma (ej: "58,000")
`FECHA INGRESO` = col_date(format = "%m/%d/%Y") # Formato detectado: mes/día/año
)
)
# 2. Limpieza de salarios y renombrado de columnas
empleados_csv <- empleados_csv %>%
mutate(
# Eliminar la coma del salario y transformarlo en un número real (double)
salario_mensual = as.numeric(gsub(",", "", `SALARIO MENSUAL`))
) %>%
rename(
id_empleado = `ID-EMPLEADO`,
nombre = NOMBRE,
departamento = DEPARTAMENTO,
fecha_ingreso = `FECHA INGRESO`
) %>%
# Seleccionar y ordenar las columnas requeridas
select(id_empleado, nombre, departamento, salario_mensual, fecha_ingreso)
# Verificar con glimpse que los tipos finales sean correctos
glimpse(empleados_csv)Rows: 20
Columns: 5
$ id_empleado <chr> "001", "002", "003", "004", "005", "006", "007", "008"…
$ nombre <chr> "Ana Torres", "Pedro M\xe9ndez", "Mar\xeda L\xf3pez", …
$ departamento <chr> "Tecnolog\xeda", "Auditor\xeda", "Tecnolog\xeda", "RRH…
$ 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-…
# 1. Leer ambas pestañas (sheets) de empleados.xlsx
excel_2022 <- read_excel("empleados.xlsx", sheet = "2022")
excel_2023 <- read_excel("empleados.xlsx", sheet = "2023")
# 2. Mapear las columnas originales a minúsculas y forzar tipos de datos correctos
excel_2022_limpio <- excel_2022 %>%
select(
id_empleado = `ID-EMPLEADO`,
nombre = NOMBRE,
departamento = DEPARTAMENTO,
salario_mensual = `SALARIO MENSUAL`,
fecha_ingreso = `FECHA INGRESO`
) %>%
mutate(
id_empleado = as.character(id_empleado),
fecha_ingreso = as.Date(fecha_ingreso)
)
excel_2023_limpio <- excel_2023 %>%
select(
id_empleado = `ID-EMPLEADO`,
nombre = NOMBRE,
departamento = DEPARTAMENTO,
salario_mensual = `SALARIO MENSUAL`,
fecha_ingreso = `FECHA INGRESO`
) %>%
mutate(
id_empleado = as.character(id_empleado),
fecha_ingreso = as.Date(fecha_ingreso)
)
# 3. Combinar ambos años añadiendo la columna identificadora 'anio'
empleados_excel_total <- bind_rows(
excel_2022_limpio %>% mutate(anio = 2022),
excel_2023_limpio %>% mutate(anio = 2023)
)
# Mostrar una muestra de los datos combinados
head(empleados_excel_total)# A tibble: 6 × 6
id_empleado nombre departamento salario_mensual fecha_ingreso anio
<chr> <chr> <chr> <dbl> <date> <dbl>
1 001 Ana Torres Tecnología 58000 2019-03-15 2022
2 002 Pedro Méndez Auditoría 45000 2021-07-01 2022
3 003 María López Tecnología 63000 2018-11-20 2022
4 004 Luis García RRHH 41000 2022-01-10 2022
5 005 Carmen Díaz Auditoría 52000 2020-05-30 2022
6 006 Carlos Mendoza Tecnología 70000 2017-04-12 2022
# 4. Calcular el promedio de salario por departamento usando group_by() + summarise()
promedio_departamento <- empleados_excel_total %>%
group_by(departamento) %>%
summarise(
salario_promedio = mean(salario_mensual, na.rm = TRUE),
total_empleados = n()
)
# Mostrar la tabla resumen con los salarios promedio
promedio_departamento# A tibble: 5 × 3
departamento salario_promedio 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
# 1. Crear o conectarse a una base de datos SQLite local
con <- dbConnect(RSQLite::SQLite(), "mi_base_datos.sqlite")
# 2. Preparar el tibble final calculando el salario total anual (salario mensual * 12)
tabla_sqlite <- empleados_excel_total %>%
mutate(monto_total_año = salario_mensual * 12) %>%
select(id_empleado, anio, monto_total_año)
# Escribir la tabla "empleados" dentro de la base de datos (sobrescribe si ya existía)
dbWriteTable(con, "empleados", tabla_sqlite, overwrite = TRUE)
# Listar las tablas disponibles en la base para certificar su creación
dbListTables(con)[1] "empleados"
# 3. Leer de regreso los datos filtrando únicamente el año 2023 con la cláusula WHERE
consulta_2023 <- dbGetQuery(con, "SELECT * FROM empleados WHERE anio = 2023")
# Mostrar el resultado obtenido de la consulta SQL
consulta_2023 id_empleado anio monto_total_año
1 011 2023 732000
2 012 2023 564000
3 013 2023 636000
4 014 2023 660000
5 015 2023 804000
6 016 2023 612000
7 017 2023 504000
8 018 2023 552000
9 019 2023 864000
10 020 2023 696000
# Desconectar de forma segura de la base de datos al concluir el proceso
dbDisconnect(con)