Esta sección está dedicada al estudio de las variables de tipo cualitativo nominal. El Grupo 2 utilizará tablas de frecuencia y gráficos de barras para resumir la información y destacar las clases o grupos más recurrentes en el conjunto de datos.
# 1. CARGAR DATOS (Por seguridad)
database <- read.csv("database.csv", header=TRUE, sep=",", dec=".")
# 2. PREPARACIÓN DE DATOS
# Buscamos la columna "Operator" automáticamente
col_operador <- grep("Operator", names(database), value = TRUE)[1]
raw_operador <- database[[col_operador]]
# 3. CÁLCULOS
Tabla_Op <- as.data.frame(table(raw_operador))
colnames(Tabla_Op) <- c("Operador", "Freq")
# Ordenar de mayor a menor (Vital para que se vea la curva de distribución)
Tabla_Op <- Tabla_Op[order(-Tabla_Op$Freq), ]
# 4. GRÁFICO GIGANTE
# Usamos toda la tabla 'Tabla_Op' sin recortar
par(mar=c(5, 14, 4, 2)) # Margen izquierdo amplio
barplot(Tabla_Op$Freq,
names.arg = Tabla_Op$Operador,
col = "darkblue",
horiz = TRUE,
las = 2,
main = "Todos los Operadores Registrados",
xlab = "Número de Accidentes",
cex.names = 0.3, # Letra diminuta para que intenten caber todos
border = NA) # Sin bordes para que se vea más limpio
# 1. CARGAR DATOS (Por seguridad, para que no falle el bloque)
database <- read.csv("database.csv", header=TRUE, sep=",", dec=".")
# 2. PREPARACIÓN DE DATOS
# Buscamos la columna "Facility" automáticamente
col_tuberia <- grep("Facility", names(database), value = TRUE)[1]
raw_tuberias <- database[[col_tuberia]]
# 3. CÁLCULOS
Tabla_Pipe <- as.data.frame(table(raw_tuberias))
colnames(Tabla_Pipe) <- c("Nombre", "Freq")
# Ordenar de mayor a menor (Vital)
Tabla_Pipe <- Tabla_Pipe[order(-Tabla_Pipe$Freq), ]
# 4. GRÁFICO GIGANTE
# Usamos toda la tabla 'Tabla_Pipe' directamente (sin head)
Datos_A_Graficar <- Tabla_Pipe
# Margen izquierdo muy amplio (16) y letra diminuta
par(mar=c(5, 16, 4, 2))
barplot(Datos_A_Graficar$Freq,
names.arg = Datos_A_Graficar$Nombre,
col = "forestgreen",
horiz = TRUE,
las = 2,
main = "Todas las Tuberías Registradas",
xlab = "Número de Accidentes",
cex.names = 0.3, # Letra EXTRA pequeña (0.3) para que quepan
border = NA) # Sin bordes para que se vea más limpio
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura
col_target <- grep("Shutdown", names(database), value = TRUE)[1]
raw_shut <- database[[col_target]]
# Limpiamos datos vacíos
raw_shut <- raw_shut[raw_shut != ""]
# 2. CÁLCULOS
frecuencias_shut <- table(raw_shut)
frecuencias_shut_ordenadas <- sort(frecuencias_shut, decreasing = TRUE)
# 3. PREPARACIÓN DE COLORES (Tu paleta)
mis_colores <- c("salmon", "mediumturquoise")
# Reciclamos los colores para asegurar que cubran todas las barras
colores_finales <- rep(mis_colores, length.out = length(frecuencias_shut_ordenadas))
# 4. GRÁFICO
par(mar=c(5, 5, 4, 2))
barplot(frecuencias_shut_ordenadas,
main = "Pipeline Shutdown",
xlab = "Cierre de Tubería",
ylab = "Frecuencia",
col = colores_finales,
border = "white",
las = 1,
cex.names = 0.9)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna "Pipeline Type" (o Pipeline.Type) automáticamente
cols_pipe <- grep("Pipeline", names(database), value = TRUE)
col_target <- grep("Type", cols_pipe, value = TRUE)[1]
raw_type <- database[[col_target]]
# Limpiamos datos vacíos
raw_type <- raw_type[raw_type != ""]
# 2. CÁLCULOS
frecuencias_pipeline <- table(raw_type)
frecuencias_pipeline_ordenadas <- sort(frecuencias_pipeline, decreasing = TRUE)
# 3. GRÁFICO (Con tus colores por nombre)
barplot(frecuencias_pipeline_ordenadas,
main = "Distribución de Pipeline Types",
xlab = "Tipo de Pipeline",
ylab = "Frecuencia",
# Colores cambiados a nombres en inglés:
col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
border = "white",
cex.names = 0.8)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura
cols_liq <- grep("Liquid", names(database), value = TRUE)
col_target <- grep("Type", cols_liq, value = TRUE)[1]
raw_liquid <- database[[col_target]]
# Limpiamos vacíos
raw_liquid <- raw_liquid[raw_liquid != ""]
# 2. TABLA Y ORDENAMIENTO
frecuencias_liquid <- table(raw_liquid)
frecuencias_liquid_ordenadas <- sort(frecuencias_liquid, decreasing = TRUE)
# 3. RENOMBRAR CATEGORÍAS
# Definimos el "diccionario" de traducción
nuevos_nombres_liquid <- c(
"HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS" = "Gas VAF / Tóxico",
"CRUDE OIL" = "Crudo",
"REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" = "Producto Refinado",
"CO2 (CARBON DIOXIDE)" = "CO2",
"BIOFUEL / ALTERNATIVE FUEL (INCLUDING ETHANOL BLENDS)" = "Biocombustible"
)
# Aplicamos los nombres con seguridad:
nombres_actuales <- names(frecuencias_liquid_ordenadas)
# Buscamos el nombre nuevo en el diccionario
labels_nuevos <- nuevos_nombres_liquid[nombres_actuales]
# Si alguno no estaba en la lista (sale NA), le dejamos el nombre original
labels_nuevos[is.na(labels_nuevos)] <- nombres_actuales[is.na(labels_nuevos)]
# Asignamos los nombres finales
names(frecuencias_liquid_ordenadas) <- labels_nuevos
# 4. GRÁFICO HORIZONTAL
par(mar = c(5, 12, 4, 2)) # Margen izquierdo amplio para que quepan los textos
barplot(frecuencias_liquid_ordenadas,
horiz = TRUE,
main = "Distribución de Liquid Types",
xlab = "Frecuencia",
# Aquí aplicamos la paleta de colores para todos los tipos
col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
las = 1,
cex.names = 0.8,
border = "white",
font.main = 2)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Liquid Subtype)
cols_liq <- grep("Liquid", names(database), value = TRUE)
col_target <- grep("Subtype", cols_liq, value = TRUE)[1]
raw_subtype <- database[[col_target]]
# Limpiamos vacíos (Importante para que no salga una barra sin nombre)
raw_subtype <- raw_subtype[raw_subtype != ""]
# 2. CÁLCULOS
frecuencias_subtype <- table(raw_subtype)
frecuencias_subtype_ordenadas <- sort(frecuencias_subtype, decreasing = TRUE)
# 3. RENOMBRAR CATEGORÍAS (Tu lógica)
# Diccionario de traducción
nuevos_nombres <- c(
"BIODIESEL" = "BIODIESEL",
"LPG (LIQUEFIED PETROLEUM GAS)" = "LPG",
"GASOLINE (NON-ETHANOL)" = "GASOLINA SIN ETANOL",
"DIESEL, FUEL OIL, KEROSENE, JET FUEL" = "COMBUSTIBLES VARIOS",
"ANHYDROUS AMMONIA" = "AMONÍACO ANHIDRO",
"OTHER HVL" = "OTROS HVL",
"MIXTURE OF REFINED PRODUCTS (TRANSMIX OR OTHER MIXTURE)" = "MEZCLAS REFINADAS",
"OTHER" = "OTROS"
)
# --- LÓGICA DE SEGURIDAD ---
# Intentamos traducir los nombres
nombres_actuales <- names(frecuencias_subtype_ordenadas)
labels_finales <- nuevos_nombres[nombres_actuales]
# Si algún nombre no estaba en tu lista (sale NA), usamos el nombre original
# Esto evita que el gráfico falle si hay un dato nuevo
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]
# Aplicamos los nombres
names(frecuencias_subtype_ordenadas) <- labels_finales
# 4. GRÁFICO HORIZONTAL (Tu diseño exacto)
par(mar = c(5, 12, 4, 2))
barplot(frecuencias_subtype_ordenadas,
horiz = TRUE,
main = "Distribución de Liquid Subtypes",
xlab = "Frecuencia",
col = "lightblue",
las = 1,
cex.names = 0.8,
border = "white",
font.main = 2)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Liquid Name)
cols_liq <- grep("Liquid", names(database), value = TRUE)
col_target <- grep("Name", cols_liq, value = TRUE)[1]
raw_name <- database[[col_target]]
# Limpiamos vacíos
raw_name <- raw_name[raw_name != ""]
# 2. CÁLCULOS
frecuencias_name <- table(raw_name)
frecuencias_name_ordenadas <- sort(frecuencias_name, decreasing = TRUE)
# NOTA: Se eliminó la línea "head" para incluir TODOS los registros.
# 3. RENOMBRAR CATEGORÍAS
# Traducimos los líquidos más comunes
nuevos_nombres_liq <- c(
"CRUDE OIL" = "CRUDO",
"GASOLINE (NON-ETHANOL)" = "GASOLINA (SIN ETANOL)",
"REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" = "PRODUCTO REFINADO",
"HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS" = "GAS INFLAMABLE/TÓXICO",
"DIESEL, FUEL OIL, KEROSENE, JET FUEL" = "DIESEL / KEROSENO",
"CO2 (CARBON DIOXIDE)" = "DIÓXIDO DE CARBONO (CO2)",
"BIOFUEL / ALTERNATIVE FUEL (INCLUDING ETHANOL BLENDS)" = "BIOCOMBUSTIBLE",
"LPG (LIQUEFIED PETROLEUM GAS)" = "GAS LICUADO (LPG)",
"ANHYDROUS AMMONIA" = "AMONÍACO ANHIDRO"
)
# --- LÓGICA DE SEGURIDAD ---
nombres_actuales <- names(frecuencias_name_ordenadas)
labels_finales <- nuevos_nombres_liq[nombres_actuales]
# Si aparece un líquido raro no traducido, usamos el original
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]
# Aplicamos los nombres
names(frecuencias_name_ordenadas) <- labels_finales
# 4. GRÁFICO HORIZONTAL COMPLETO
# Margen izquierdo amplio (14 o más) para nombres largos
par(mar = c(5, 14, 4, 2))
barplot(frecuencias_name_ordenadas,
horiz = TRUE,
main = "Todos los Líquidos (Liquid Name)",
xlab = "Frecuencia",
# Usamos tu paleta personalizada que se recicla automáticamente
col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
las = 1,
cex.names = 0.6, # Letra un poco más pequeña para que quepan todos
border = "white",
font.main = 2)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
# --- 1. PREPARACIÓN DE DATOS ---
# Buscamos la columna "Accident City" automáticamente
col_city <- grep("City", names(database), value = TRUE)[1]
# Creamos la tabla con TODAS las ciudades
todas_ciudades <- database %>%
count(Ciudad = .[[col_city]], sort = TRUE) %>%
rename(Recuento = n) %>%
filter(Ciudad != "") # Filtramos vacíos para limpiar el gráfico
# Definimos tu paleta de colores
mis_colores <- c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite")
# --- 2. CREAR EL GRÁFICO ---
grafico_ciudades <- todas_ciudades %>%
ggplot(aes(x = reorder(Ciudad, Recuento), y = Recuento)) +
# Usamos rep() para reciclar tus colores exactos a lo largo de todas las barras
geom_col(fill = rep(mis_colores, length.out = nrow(todas_ciudades))) +
coord_flip() +
labs(
title = "Accidentes por Ciudad (Lista Completa)",
x = "Ciudad",
y = "Recuento de Accidentes"
) +
theme_minimal() +
theme(
# Texto muy pequeño (4) para intentar mostrar tantos nombres
axis.text.y = element_text(size = 4),
panel.grid.major.y = element_blank() # Quitamos líneas horizontales para limpiar visualmente
)
# --- 3. MOSTRAR EL GRÁFICO ---
print(grafico_ciudades)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Accident State)
col_target <- grep("State", names(database), value = TRUE)[1]
raw_state <- database[[col_target]]
# Limpiamos vacíos
raw_state <- raw_state[raw_state != ""]
# 2. CÁLCULOS
frecuencias_state <- table(raw_state)
frecuencias_state_ordenadas <- sort(frecuencias_state, decreasing = TRUE)
# NOTA: He eliminado la restricción de "Top 10" para que salgan todos.
# 3. RENOMBRAR CATEGORÍAS (Diccionario de Traducción)
# Traducimos las abreviaturas más comunes.
# (Los estados que no estén aquí saldrán con su abreviatura original: NY, FL, etc.)
nuevos_nombres_state <- c(
"TX" = "TEXAS",
"LA" = "LUISIANA",
"CA" = "CALIFORNIA",
"OK" = "OKLAHOMA",
"PA" = "PENSILVANIA",
"IL" = "ILLINOIS",
"OH" = "OHIO",
"KS" = "KANSAS",
"MN" = "MINNESOTA",
"NM" = "NUEVO MÉXICO"
)
# --- LÓGICA DE SEGURIDAD ---
nombres_actuales <- names(frecuencias_state_ordenadas)
labels_finales <- nuevos_nombres_state[nombres_actuales]
# Si aparece un estado que no está en la lista (sale NA), usamos su abreviatura original
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]
# Aplicamos los nombres
names(frecuencias_state_ordenadas) <- labels_finales
# 4. GRÁFICO HORIZONTAL COMPLETO
# Ajustamos márgenes para ver bien los nombres
par(mar = c(5, 8, 4, 2))
barplot(frecuencias_state_ordenadas,
horiz = TRUE,
main = "Todos los Estados Registrados",
xlab = "Frecuencia",
# Tu paleta de colores personalizada:
col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
las = 1,
cex.names = 0.6, # Letra más pequeña para que quepan todos
border = "white",
font.main = 2)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Cause Category)
cols_cause <- grep("Cause", names(database), value = TRUE)
col_target <- grep("Category", cols_cause, value = TRUE)[1]
raw_cause <- database[[col_target]]
# Limpiamos vacíos
raw_cause <- raw_cause[raw_cause != ""]
# 2. CÁLCULOS
frecuencias_cause <- table(raw_cause)
frecuencias_cause_ordenadas <- sort(frecuencias_cause, decreasing = TRUE)
# NOTA: Al no usar head(), se graficarán TODAS las categorías existentes.
# 3. RENOMBRAR CATEGORÍAS (Diccionario de Traducción)
nuevos_nombres_causa <- c(
"CORROSION" = "CORROSIÓN",
"EXCAVATION DAMAGE" = "DAÑO POR EXCAVACIÓN",
"INCORRECT OPERATION" = "OPERACIÓN INCORRECTA",
"MATERIAL/WELD/EQUIP FAILURE" = "FALLA MATERIAL/EQUIPO",
"NATURAL FORCE DAMAGE" = "FUERZAS NATURALES",
"OTHER OUTSIDE FORCE DAMAGE" = "DAÑO EXTERNO",
"ALL OTHER CAUSES" = "OTRAS CAUSAS"
)
# --- LÓGICA DE SEGURIDAD ---
# Intentamos traducir los nombres
nombres_actuales <- names(frecuencias_cause_ordenadas)
labels_finales <- nuevos_nombres_causa[nombres_actuales]
# Si aparece una causa rara que no está en la lista, usamos su nombre original
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]
# Aplicamos los nombres finales
names(frecuencias_cause_ordenadas) <- labels_finales
# 4. GRÁFICO HORIZONTAL COMPLETO
# Margen izquierdo amplio (14) para que quepan los textos largos
par(mar = c(5, 14, 4, 2))
barplot(frecuencias_cause_ordenadas,
horiz = TRUE,
main = "Todas las Causas Principales",
xlab = "Frecuencia",
# Aplicamos tu paleta de colores personalizada
col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
las = 1, # Etiquetas horizontales
cex.names = 0.8, # Tamaño de letra
border = "white",
font.main = 2)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura. Primero "Cause", luego "Sub" (Subcategory)
cols_cause <- grep("Cause", names(database), value = TRUE)
col_target <- grep("Sub", cols_cause, value = TRUE)[1]
raw_sub <- database[[col_target]]
# Limpiamos vacíos
raw_sub <- raw_sub[raw_sub != ""]
# 2. CÁLCULOS
frecuencias_sub <- table(raw_sub)
frecuencias_sub_ordenadas <- sort(frecuencias_sub, decreasing = TRUE)
# NOTA: No usamos head() para incluir TODAS las subcausas.
# 3. RENOMBRAR CATEGORÍAS (Diccionario Ampliado)
# Traducción de subcausas comunes en la industria (PHMSA/DOT)
nuevos_nombres_sub <- c(
"INTERNAL CORROSION" = "CORROSIÓN INTERNA",
"EXTERNAL CORROSION" = "CORROSIÓN EXTERNA",
"THIRD PARTY EXCAVATION DAMAGE" = "EXCAVACIÓN (TERCEROS)",
"OPERATOR EXCAVATION DAMAGE" = "EXCAVACIÓN (OPERADOR)",
"PREVIOUS DAMAGE DUE TO EXCAVATION" = "DAÑO PREVIO POR EXCAVACIÓN",
"EARTH MOVEMENT" = "MOVIMIENTO DE TIERRA",
"HEAVY RAINS/FLOODS" = "LLUVIAS / INUNDACIONES",
"LIGHTNING" = "RAYOS",
"TEMPERATURE" = "TEMPERATURA EXTREMA",
"HIGH WINDS" = "VIENTOS FUERTES",
"BODY OF PIPE" = "CUERPO DE LA TUBERÍA",
"COMPONENT" = "COMPONENTE",
"BUTT WELD" = "SOLDADURA A TOPE",
"FILLET WELD" = "SOLDADURA DE FILETE",
"PIPE GIRTH WELD" = "SOLDADURA CIRCUNFERENCIAL",
"THREADED CONNECTION" = "CONEXIÓN ROSCADA",
"VALVE" = "VÁLVULA",
"PUMP OR COMPRESSOR" = "BOMBA O COMPRESOR",
"TANK/VESSEL" = "TANQUE / VASIJA",
"MISCELLANEOUS" = "MISCELÁNEOS",
"UNKNOWN" = "DESCONOCIDO",
"HUMAN ERROR" = "ERROR HUMANO",
"OVERPRESSURE" = "SOBREPRESIÓN",
"EQUIPMENT FAILURE" = "FALLA DE EQUIPO"
)
# --- LÓGICA DE SEGURIDAD ---
nombres_actuales <- names(frecuencias_sub_ordenadas)
labels_finales <- nuevos_nombres_sub[nombres_actuales]
# Si aparece una subcausa que no está en la lista, usamos el nombre original
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]
# Aplicamos los nombres
names(frecuencias_sub_ordenadas) <- labels_finales
# 4. GRÁFICO HORIZONTAL COMPLETO
# Aumentamos el margen izquierdo (16) porque las subcategorías suelen tener nombres largos
par(mar = c(5, 16, 4, 2))
barplot(frecuencias_sub_ordenadas,
horiz = TRUE,
main = "Detalle de Subcausas (Cause Subcategory)",
xlab = "Frecuencia",
# Tu paleta de colores personalizada (se recicla automáticamente)
col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
las = 1,
cex.names = 0.6, # Letra pequeña para que quepan todas las opciones
border = "white",
font.main = 2)
# 1. Cargar librerías necesarias
library(ggplot2)
# 2. Seleccionar la columna automáticamente
# Buscamos la columna que tenga la palabra "Ignition" (funciona con espacios o puntos)
nombre_columna <- grep("Ignition", names(database), value = TRUE)[1]
# 3. Graficar con ggplot2
grafica <- ggplot(database, aes(x = .data[[nombre_columna]])) +
geom_bar(fill = "orangered") +
theme_minimal() +
labs(
x = "Hubo Ignición?",
y = "Cantidad de Accidentes",
title = paste("Frecuencia de:", nombre_columna)
)
# Mostrar la gráfica en el reporte
print(grafica)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Liquid Explosion)
col_target <- grep("Explosion", names(database), value = TRUE)[1]
raw_explosion <- database[[col_target]]
# Limpiamos vacíos
raw_explosion <- raw_explosion[raw_explosion != ""]
# 2. TABLA Y ORDENAMIENTO
frecuencias_explosion <- table(raw_explosion)
frecuencias_explosion_ordenadas <- sort(frecuencias_explosion, decreasing = TRUE)
# 3. RENOMBRAR CATEGORÍAS
# Diccionario de traducción
nuevos_nombres_explosion <- c(
"YES" = "Sí",
"NO" = "No"
)
# Aplicamos los nombres con seguridad:
nombres_actuales <- names(frecuencias_explosion_ordenadas)
labels_nuevos <- nuevos_nombres_explosion[nombres_actuales]
# Si alguno no estaba en la lista, usamos el original
labels_nuevos[is.na(labels_nuevos)] <- nombres_actuales[is.na(labels_nuevos)]
# Asignamos los nombres finales
names(frecuencias_explosion_ordenadas) <- labels_nuevos
# 4. GRÁFICO HORIZONTAL
par(mar = c(5, 12, 4, 2)) # Margen izquierdo amplio
barplot(frecuencias_explosion_ordenadas,
horiz = TRUE,
main = "Explosión de Líquido (Liquid Explosion)",
xlab = "Frecuencia",
col = "orangered",
las = 1,
cex.names = 1.0,
border = "white",
font.main = 2)
# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Pipeline Shutdown)
# "Shutdown" es la palabra clave única
col_target <- grep("Shutdown", names(database), value = TRUE)[1]
raw_shutdown <- database[[col_target]]
# Limpiamos vacíos
raw_shutdown <- raw_shutdown[raw_shutdown != ""]
# 2. TABLA Y ORDENAMIENTO
frecuencias_shutdown <- table(raw_shutdown)
frecuencias_shutdown_ordenadas <- sort(frecuencias_shutdown, decreasing = TRUE)
# 3. RENOMBRAR CATEGORÍAS
# Definimos el "diccionario" de traducción
nuevos_nombres_shutdown <- c(
"YES" = "Sí",
"NO" = "No"
)
# Aplicamos los nombres con seguridad:
nombres_actuales <- names(frecuencias_shutdown_ordenadas)
# Buscamos el nombre nuevo en el diccionario
labels_nuevos <- nuevos_nombres_shutdown[nombres_actuales]
# Si alguno no estaba en la lista (sale NA), le dejamos el nombre original
labels_nuevos[is.na(labels_nuevos)] <- nombres_actuales[is.na(labels_nuevos)]
# Asignamos los nombres finales
names(frecuencias_shutdown_ordenadas) <- labels_nuevos
# 4. GRÁFICO HORIZONTAL (Tu diseño)
par(mar = c(5, 12, 4, 2)) # Margen izquierdo amplio
barplot(frecuencias_shutdown_ordenadas,
horiz = TRUE,
main = "Estado de Pipeline Shutdown",
xlab = "Frecuencia",
col = "skyblue",
las = 1,
cex.names = 1.0,
border = "white",
font.main = 2)