FECHA: 22/11/2025
# Cargar librerías necesarias
library(gt)
# 0. Cargar el dataframe
TDFDate <- read.csv("C:/Users/JOSELYN/Desktop/kangle/Datos Cambiados.csv", header = TRUE)
# 1. Preparación de Datos: Convertir a formato de fecha R
TDFDate$Date_Convertida <- as.Date(TDFDate$Date, format = "%d/%m/%Y")
# 2. Agrupación por Año:
grupos_Anio <- format(TDFDate$Date_Convertida, format = "%Y")
grupos_Anio_limpio <- grupos_Anio[!is.na(grupos_Anio)]
# 3. Cálculo de Frecuencias (ni)
tabla_frecuencia <- as.data.frame(table(grupos_Anio_limpio))
# 4. Asignación de Variables
Anio <- tabla_frecuencia$grupos_Anio_limpio
ni <- tabla_frecuencia$Freq
# 5. Cálculos Derivados (Frecuencias relativas y acumuladas)
hi <- ni / sum(ni) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- round(cumsum(hi), 2)
Hi_dsc <- round(rev(cumsum(rev(hi))), 2)
# 6. Crear la Tabla de Distribución de Frecuencias Agrupadas
TDFAnioFin <- data.frame(Anio, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)
# --- INCLUSIÓN DE LA FILA TOTAL ---
total_ni <- sum(ni)
total_hi <- sum(hi)
# 7. CREACIÓN DE TDFAnioCompleto (La variable que gt necesita)
TDFAnioCompleto <- rbind(TDFAnioFin,
data.frame(Anio = "Total",
ni = total_ni,
hi = total_hi,
Ni_asc = NA,
Ni_dsc = NA,
Hi_asc = NA,
Hi_dsc = NA))
# =======================================================
# VISUALIZACIÓN CON GT (Debe estar en el mismo bloque)
# =======================================================
TDFAnioCompleto %>%
gt() %>%
# Formato de dos decimales para porcentajes
fmt_number(
columns = c(hi, Hi_asc, Hi_dsc),
decimals = 2,
suffix = "%"
) %>%
# 1. Título y Subtítulo
tab_header(
title = md("**Tabla Nro. 2**"),
subtitle = md("Tabla de distribución de frecuencias de los datos agrupados por **Año**")
) %>%
# Renombrar las columnas
cols_label(
Anio = "Año",
ni = html("n<sub>i</sub>"),
hi = html("h<sub>i</sub> (%)"),
Ni_asc = html("N<sub>i</sub> asc"),
Ni_dsc = html("N<sub>i</sub> dsc"),
Hi_asc = html("H<sub>i</sub> asc (%)"),
Hi_dsc = html("H<sub>i</sub> dsc (%)")
) %>%
# [Resto de estilos de gt]...
# 2. Nota de Fuente
tab_source_note(
source_note = md("Fuente: Datos procesados por el autor a partir de archivo city.day.csv")
) %>%
# 3. Estilos de Bordes
tab_style(
style = cell_borders(sides = "left", color = "black", weight = px(2), style = "solid"),
locations = cells_body()
) %>%
tab_style(
style = cell_borders(sides = "right", color = "black", weight = px(2), style = "solid"),
locations = cells_body()
) %>%
tab_style(
style = cell_borders(sides = "left", color = "black", weight = px(2), style = "solid"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_borders(sides = "right", color = "black", weight = px(2), style = "solid"),
locations = cells_column_labels()
)%>%
# 4. Opciones de Estilos
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black"
)
| Tabla Nro. 2 |
| Tabla de distribución de frecuencias de los datos agrupados por Año |
| Año |
ni |
hi (%) |
Ni asc |
Ni dsc |
Hi asc (%) |
Hi dsc (%) |
| 2015 |
2801 |
9.48 |
2801 |
29531 |
9.48 |
100.00 |
| 2016 |
3478 |
11.78 |
6279 |
26730 |
21.26 |
90.52 |
| 2017 |
4689 |
15.88 |
10968 |
23252 |
37.14 |
78.74 |
| 2018 |
6471 |
21.91 |
17439 |
18563 |
59.05 |
62.86 |
| 2019 |
7446 |
25.21 |
24885 |
12092 |
84.27 |
40.95 |
| 2020 |
4646 |
15.73 |
29531 |
4646 |
100.00 |
15.73 |
| Total |
29531 |
100.00 |
NA |
NA |
NA |
NA |
| Fuente: Datos procesados por el autor a partir de archivo city.day.csv |
# DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (ni) - Local
barplot(TDFAnioFin$ni,
main = "Gráfico Nº1.1: Frecuencia Absoluta (ni) \n de Observaciones por Año",
xlab = "Año de la Muestra",
ylab = "Frecuencia Absoluta (Cantidad de Días)",
names.arg = TDFAnioFin$Anio, # Usa los Años como etiquetas
las = 1, # Etiquetas del eje X horizontales (se ven mejor con años)
col = "skyblue")

# 2. DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (ni) - Global
limite_y <- sum(TDFAnioFin$ni) # Recalcula el límite Y (el total de la muestra)
barplot(TDFAnioFin$ni,
main = "Gráfico Global: Frecuencia de Observaciones por Año",
xlab = "Año",
ylab = "Frecuencia Absoluta",
names.arg = TDFAnioFin$Anio,
las = 1,
col = "darkblue",
ylim = c(0, limite_y)) # Establece el eje Y desde 0 hasta el total

# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - Local
barplot(TDFAnioFin$hi,
main = "Gráfica: Porcentaje de Observaciones por Año (Local)",
xlab = "Año de la Muestra",
ylab = "Porcentaje (%)",
names.arg = TDFAnioFin$Anio, # Usa los Años como etiquetas
las = 1,
col = "darkgreen",
ylim = c(0, 100)) # El eje Y siempre va de 0 a 100%

# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - Global
barplot(TDFAnioFin$hi,
main = "Gráfica: Porcentaje de Observaciones por Año (Global)",
xlab = "Año",
ylab = "Porcentaje (%)",
names.arg = TDFAnioFin$Anio,
las = 1,
col = "red",
ylim = c(0, 100))

# 1. Graficar la ojiva ascendente (Ni_asc)
plot(x = 1:length(TDFAnioFin$Anio),
y = TDFAnioFin$Ni_asc,
type = "o",
col = "red",
xlab = "Año",
ylab = "Frecuencia Absoluta Acumulada (Ni)",
main = "Gráfico de Ojivas Combinadas: Acumulado por Año",
xaxt = "n", # Oculta las etiquetas del eje X por defecto
ylim = c(0, max(TDFAnioFin$Ni_asc))) # Ajusta el límite Y al total de la muestra
# 2. Agregar las etiquetas del eje X usando los Años
axis(side = 1,
at = 1:length(TDFAnioFin$Anio),
labels = TDFAnioFin$Anio,
las = 1) # Etiquetas horizontales
# 3. Agregar la ojiva descendente (Ni_dsc)
lines(x = 1:length(TDFAnioFin$Anio),
y = TDFAnioFin$Ni_dsc,
type = "o",
col = "blue")
# 4. Agregar la Leyenda
legend("topright",
legend = c("Ojiva Ascendente (Ni_asc)", "Ojiva Descendente (Ni_dsc)"),
cex = 0.8,
col = c("red", "blue"),
pch = 1)
