graph TD; A[r_training] --> B[scripts]; A --> C[data]; A --> D[outputs];
Capacitación en R
Al comenzar un nuevo análisis, organiza tu trabajo creando un sistema estructurado de carpetas:
📁 r_training
📂 scripts/ (código)
📂 data/ (conjuntos de datos)
📁 outputs/ (resultados como gráficos, tablas, etc.)
graph TD; A[r_training] --> B[scripts]; A --> C[data]; A --> D[outputs];
Note
Usa minúsculas y guiones (-) en lugar de espacios al nombrar carpetas, archivos y objetos en R para mantener la consistencia y facilitar la gestión.
Dos Tipos de Rutas:
/Users/tunombre/Desktop/r_trainingr_training/scriptsR no sabe automáticamente dónde están tus archivos. Usar un proyecto de RStudio crea un atajo que le dice a R dónde encontrar todo, haciendo tu flujo de trabajo más fluido.
05:00 Crea una nueva Carpeta llamada r_training
Crea un Proyecto
r_training y haz clic en Open.Abre el Proyecto (Haz doble clic en el archivo para abrirlo en RStudio.)
Ejecuta este comando en la Consola de RStudio:
¡Estás listo para comenzar! 🎉
datagraph TD; A[data] --> B[Raw]; A --> C[Intermediate]; A --> D[Final];
RawIntermediateFinalTipos de Documentos las organizaciones dependen extensivamente de hojas de cálculo (leer)
Los formatos de datos comunes incluyen:
Hojas de cálculo (.csv, .xlsx, xls…): Estándar para datos estructurados.
DTA (.dta): Usado para datos de STATA.
Hojas de cálculo
CSV es generalmente preferible:
Más fácil de importar y procesar.
Más compatible entre diferentes sistemas y software y mucho más ligero.
Avanzado
El formato Apache Arrow está diseñado para manejar grandes conjuntos de datos de manera eficiente, haciéndolo adecuado para análisis de big data. Los archivos Arrow ofrecen operaciones de lectura/escritura más rápidas en comparación con los formatos tradicionales.
Puedes encontrar el ejercicio en la carpeta “Exercises/exercise_01_template.R”
10:00 Tus tareas:
Cargar paquetes usando pacman
Importar tres conjuntos de datos:
firm_characteristics.csv (usa fread)vat_declarations.dta (usa read_dta)cit_declarations.xlsx hoja 2 (usa read_excel)janitor::clean_names()# Cargar paquetes
packages <- c("readxl", "dplyr", "tidyverse", "data.table", "here", "haven", "janitor")
if (!require("pacman")) install.packages("pacman")
pacman::p_load(packages, character.only = TRUE, install = TRUE)
# Cargar características de empresas
dt_firms <- fread(here("Data", "Raw", "firm_characteristics.csv"))
head(dt_firms, 5)
names(dt_firms)
dt_firms <- clean_names(dt_firms)
# Cargar declaraciones de IVA
panel_vat <- read_dta(here("Data", "Raw", "vat_declarations.dta"))
head(panel_vat, 5)
names(panel_vat)
# Cargar declaraciones de impuesto de sociedades
panel_cit <- read_excel(here("Data", "Raw", "cit_declarations.xlsx"), sheet = 2)
head(panel_cit, 5)
names(panel_cit)
# Bonus: Asegurar nomenclatura consistente
panel_vat <- rename(panel_vat, firm_id = id_firm) # si es necesario# A tibble: 6 × 7
`Taxpayer ID` Name `Tax Filing Year` `Taxable Income` `Tax Paid` Region
<chr> <chr> <dbl> <dbl> <dbl> <chr>
1 TX001 John Doe 2020 89854 8985 North
2 TX001 John Doe 2021 65289 6528 North
3 TX001 John Doe 2022 87053 8705 North
4 TX001 John Doe 2023 58685 5868 North
5 TX002 Jane Smith 2020 97152 9715 South
6 TX002 Jane Smith 2021 62035 6203 South
# ℹ 1 more variable: `Payment Date` <dttm>
# A tibble: 6 × 7
`Taxpayer ID` Name `Tax Filing Year` `Taxable Income` `Tax Paid` Region
<chr> <chr> <dbl> <dbl> <dbl> <chr>
1 TX009 Olivia King 2022 91276 9127 North
2 TX009 Olivia King 2023 90487 9048 North
3 TX010 Liam Scott 2020 50776 5077 South
4 TX010 Liam Scott 2021 86257 8625 South
5 TX010 Liam Scott 2022 52659 5265 South
6 TX010 Liam Scott 2023 76665 7666 South
# ℹ 1 more variable: `Payment Date` <dttm>
Note
También podrías notar que las columnas Taxpayer ID y Full Name están rodeadas de acentos graves. Esto es porque contienen espacios, lo que rompe las reglas estándar de nomenclatura de R, convirtiéndolas en nombres no sintácticos. Para referirte a estas variables en R, necesitas encerrarlas en acentos graves.
[1] "Taxpayer ID" "Name" "Tax Filing Year" "Taxable Income"
[5] "Tax Paid" "Region" "Payment Date"
[1] "Taxpayer ID" "Name" "Tax Filing Year" "Taxable Income"
[5] "Tax Paid" "Region" "Payment Date"
tibble [40 × 7] (S3: tbl_df/tbl/data.frame)
$ Taxpayer ID : chr [1:40] "TX001" "TX001" "TX001" "TX001" ...
$ Name : chr [1:40] "John Doe" "John Doe" "John Doe" "John Doe" ...
$ Tax Filing Year: num [1:40] 2020 2021 2022 2023 2020 ...
$ Taxable Income : num [1:40] 89854 65289 87053 58685 97152 ...
$ Tax Paid : num [1:40] 8985 6528 8705 5868 9715 ...
$ Region : chr [1:40] "North" "North" "North" "North" ...
$ Payment Date : POSIXct[1:40], format: "2020-01-31" "2021-12-31" ...
Rows: 40
Columns: 7
$ `Taxpayer ID` <chr> "TX001", "TX001", "TX001", "TX001", "TX002", "TX002"…
$ Name <chr> "John Doe", "John Doe", "John Doe", "John Doe", "Jan…
$ `Tax Filing Year` <dbl> 2020, 2021, 2022, 2023, 2020, 2021, 2022, 2023, 2020…
$ `Taxable Income` <dbl> 89854, 65289, 87053, 58685, 97152, 62035, 60378, 876…
$ `Tax Paid` <dbl> 8985, 6528, 8705, 5868, 9715, 6203, 6037, 8768, 9368…
$ Region <chr> "North", "North", "North", "North", "South", "South"…
$ `Payment Date` <dttm> 2020-01-31, 2021-12-31, 2022-01-31, 2023-04-30, 202…
Tip
¡glimpse() es como str() pero más legible! Muestra tipos de datos, primeros valores, y se ajusta bien en tu consola.
Taxpayer ID Name Tax Filing Year Taxable Income
Length:40 Length:40 Min. :2020 Min. :50438
Class :character Class :character 1st Qu.:2021 1st Qu.:58748
Mode :character Mode :character Median :2022 Median :78590
Mean :2022 Mean :75504
3rd Qu.:2022 3rd Qu.:90287
Max. :2023 Max. :98140
Tax Paid Region Payment Date
Min. :5043 Length:40 Min. :2020-01-31 00:00:00
1st Qu.:5874 Class :character 1st Qu.:2021-04-23 06:00:00
Median :7858 Mode :character Median :2022-01-15 12:00:00
Mean :7550 Mean :2022-01-02 09:00:00
3rd Qu.:9028 3rd Qu.:2023-01-07 18:00:00
Max. :9814 Max. :2023-11-30 00:00:00
Tip
¡summary() es increíblemente útil! Para variables numéricas, muestra mínimo, máximo, media, mediana y cuartiles. Para variables de caracteres, muestra longitud y clase.
[1] "taxpayer_id" "name" "tax_filing_year" "taxable_income"
[5] "tax_paid" "region" "payment_date"
Puedes encontrar el ejercicio en la carpeta “Exercises/exercise_02_template.R”
10:00 Tus tareas:
Usando los tres conjuntos de datos que importaste en el Ejercicio 1:
dt_firms:glimpse() para examinar estructurapanel_vat:panel_cit:summary()# Cargar paquetes requeridos
library(dplyr)
library(data.table)
# 1. Inspeccionar dt_firms
dim(dt_firms)
glimpse(dt_firms)
summary(dt_firms)
# 2. Inspeccionar panel_vat
head(panel_vat, 10)
length(unique(panel_vat$firm_id))
names(panel_vat)
# 3. Inspeccionar panel_cit
tail(panel_cit, 5)
summary(panel_cit)Para la mayoría de los casos, escribir datos en formato .csv es una opción confiable y ampliamente compatible.
Recomiendo usar la función fwrite del paquete data.table por su velocidad y eficiencia.
# Escribir los Datos de IVA
fwrite(panel_vat, here("quarto_files", "Solutions", "Data", "Intermediate", "panel_vat.csv"))
# Escribir las Declaraciones de Impuesto de Sociedades
fwrite(panel_cit, here("quarto_files", "Solutions", "Data", "Intermediate", "panel_cit.csv"))
# Escribir las Características de Empresas
fwrite(dt_firms, here("quarto_files", "Solutions", "Data", "Intermediate", "dt_firms.csv"))Escribiendo Archivos .rds (Para Objetos de R)
El formato .rds está específicamente diseñado para guardar objetos de R. Es útil para guardar resultados intermedios, objetos o datos.
Exploraremos este formato con más detalle más adelante, pero aquí hay un ejemplo rápido:
Puedes encontrar el ejercicio en la carpeta “Exercises/exercise_03_template.R”
05:00 Tus tareas:
Guarda los tres conjuntos de datos limpios en diferentes formatos:
Características de empresas → CSV
Guardar como data/intermediate/firms_clean.csv usando fwrite()
Declaraciones de IVA → RDS
Guardar como data/intermediate/vat_clean.rds usando saveRDS()
Declaraciones de impuesto de sociedades → Parquet
Guardar como data/intermediate/cit_clean.parquet usando write_parquet()
Bonus: ¿Por qué elegimos diferentes formatos para cada conjunto de datos?
# Cargar paquetes requeridos
library(data.table)
library(arrow)
library(here)
# Guardar características de empresas como CSV
fwrite(dt_firms, here("data", "intermediate", "firms_clean.csv"))
# Guardar declaraciones de IVA como RDS
saveRDS(panel_vat, here("data", "intermediate", "vat_clean.rds"))
# Guardar declaraciones de impuesto de sociedades como Parquet
write_parquet(panel_cit, here("data", "intermediate", "cit_clean.parquet"))
# Respuesta Bonus:
# dt_firms (CSV): Datos de referencia, legibles por humanos, compartidos entre departamentos
# panel_vat (RDS): Preserva tipos de datos de R, carga más rápida en flujos de trabajo de R
# panel_cit (Parquet): Almacenamiento columnar eficiente para grandes conjuntos de datos de panelR a Bases de DatosR para Acceso a Bases de DatosR, puedes:R.Warning
Sin embargo, sugiero extraer los datos usando tu interfaz SQL y luego trabajar con los datos extraídos en R.
# Cargar Paquetes
library(DBI) # este paquete siempre es necesario
library(RMariaDB) # hay paquetes para cada tipo de base de datos (ej. MySQL, PostgreSQL, etc.)
# Establecer una conexión a la base de datos
con <- dbConnect(
MariaDB(),
host = "database.server.com",
user = "tu_nombre_usuario",
password = "tu_contraseña",
dbname = "tax_database"
)
# Consultar la base de datos
tax_data <- dbGetQuery(con, "SELECT * FROM vat_declarations WHERE year = 2023")
# Desconectar cuando termines
dbDisconnect(con)