##
## 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
library(stringr)
library(gt)
datos <- read.csv("D:/provincias_estados_unidos_2500.csv")
df_provincia <- data.frame(provincia = toupper(trimws(datos$PROVINCIA)))
df_provincia$provincia <- case_when(
# --- ESTADOS DEL NORTE ---
df_provincia$provincia %in% c("WASHINGTON", "OREGON", "IDAHO", "MONTANA", "NORTH DAKOTA",
"SOUTH DAKOTA", "MINNESOTA", "WISCONSIN", "MICHIGAN", "WYOMING",
"MAINE", "NEW HAMPSHIRE", "VERMONT", "MASSACHUSETTS",
"RHODE ISLAND", "CONNECTICUT", "NEW YORK") ~ "Norte",
# --- ESTADOS DEL CENTRO ---
df_provincia$provincia %in% c("NEVADA", "UTAH", "COLORADO", "NEBRASKA", "IOWA",
"ILLINOIS", "INDIANA", "OHIO", "CALIFORNIA", "SUR DE CALIFORNIA",
"NORTE DE CALIFORNIA", "KANSAS", "MISSOURI", "KENTUCKY",
"WEST VIRGINIA", "VIRGINIA", "MARYLAND", "DELAWARE",
"PENNSYLVANIA", "NEW JERSEY") ~ "Centro",
# --- ESTADOS DEL SUR ---
df_provincia$provincia %in% c("ARIZONA", "NEW MEXICO", "TEXAS", "OKLAHOMA", "ARKANSAS",
"LOUISIANA", "MISSISSIPPI", "ALABAMA", "TENNESSEE",
"NORTH CAROLINA", "SOUTH CAROLINA", "GEORGIA", "FLORIDA") ~ "Sur",
TRUE ~ NA_character_
)
orden_provincia <- c(
"Norte",
"Centro",
"Sur"
)
df_provincia$provincia <- factor(
df_provincia$provincia,
levels = orden_provincia,
ordered = TRUE
)
TDF_provincia <- df_provincia %>%
count(provincia, name = "ni") %>%
arrange(provincia)
# Cálculo inicial de porcentajes
TDF_provincia <- TDF_provincia %>%
mutate(hi = round(ni / sum(ni) * 100, 0))
# Ajuste matemático para forzar que la suma de 'hi' sea exactamente 100%
diferencia <- 100 - sum(TDF_provincia$hi, na.rm = TRUE)
if (diferencia != 0 & nrow(TDF_provincia) > 0) {
pos_max <- which.max(TDF_provincia$ni)
TDF_provincia$hi[pos_max] <- TDF_provincia$hi[pos_max] + diferencia
}
tabla_provincia <- TDF_provincia %>%
gt() %>%
tab_header(
title = "Tabla N° X",
subtitle = "Distribución por Región de la Provincia"
) %>%
grand_summary_rows(
columns = c(ni, hi),
fns = list(Total = ~sum(., na.rm = TRUE)),
fmt = list(~fmt_number(., decimals = 0))
)
tabla_provincia
| Tabla N° X |
| Distribución por Región de la Provincia |
|
provincia |
ni |
hi |
|
Norte |
914 |
37 |
|
Centro |
874 |
35 |
|
Sur |
608 |
24 |
|
NA |
104 |
4 |
| Total |
— |
2,500 |
100 |
# Gráfica Nº1: Frecuencia absoluta
barplot(TDF_provincia$ni,
main = "Gráfica Nº1: Frecuencia por Región",
xlab = "Región",
ylab = "Cantidad (ni)",
col = "steelblue",
names.arg = TDF_provincia$provincia,
cex.names = 0.8,
las = 1)

# Gráfica Nº2: Frecuencia absoluta ajustada
barplot(TDF_provincia$ni,
main = "Gráfica Nº2: Frecuencia por Región (Escala Ajustada)",
xlab = "Región",
ylab = "Cantidad (ni)",
col = "steelblue",
names.arg = TDF_provincia$provincia,
cex.names = 0.8,
las = 1,
ylim = c(0, max(TDF_provincia$ni) * 1.2))

# Gráfica Nº3: Frecuencia relativa
barplot(TDF_provincia$hi,
main = "Gráfica Nº3: Porcentaje por Región",
xlab = "Región",
ylab = "Porcentaje (%)",
col = "steelblue",
names.arg = TDF_provincia$provincia,
cex.names = 0.8,
las = 1)

# Gráfica Nº4: Frecuencia relativa escala completa
barplot(TDF_provincia$hi,
main = "Gráfica Nº4: Porcentaje por Región (Escala Completa)",
xlab = "Región",
ylab = "Porcentaje (%)",
col = "steelblue",
names.arg = TDF_provincia$provincia,
cex.names = 0.8,
las = 1,
ylim = c(0, 100))

# Gráfico circular
par(mar = c(4, 4, 4, 8))
colores <- rainbow(length(TDF_provincia$hi))
pie(TDF_provincia$hi,
col = colores,
main = "Distribución por Región de la Provincia",
labels = NA)
legend("right",
legend = paste(TDF_provincia$provincia, TDF_provincia$hi, "%"),
fill = colores,
title = "REGIONES",
bty = "o",
xpd = TRUE,
inset = c(-0.25, 0))

# Moda
moda_provincia <- TDF_provincia[TDF_provincia$ni == max(TDF_provincia$ni), ]
moda_provincia
## provincia ni hi
## 1 Norte 914 37
# Mediana
TDF_provincia <- TDF_provincia %>%
mutate(Ni = cumsum(ni))
N <- sum(TDF_provincia$ni)
mediana_provincia <- TDF_provincia %>%
filter(Ni >= N/2) %>%
slice(1)
mediana_provincia
## provincia ni hi Ni
## 1 Centro 874 35 1788