CARGA DE DATOS
# Ruta completa al archivo
datos <- read.csv("C:/Users/Grace/Downloads/Sedimentos Marinos (1).csv",
header = TRUE,
sep = ";",
dec = ".",
stringsAsFactors = FALSE)
Librerias
**CARGA DE LIBRERÍAS**
library(gt)
library(dplyr)
library(knitr)
TABLA DE DISTRIBUCIÓN DE FRECUENCIA
# Extraer variable original
contacto_original <- datos$CONTACT
# Reclasificación
contacto_reclas <- case_when(
is.na(contacto_original) | contacto_original == "" | contacto_original == " " | contacto_original == "-"
~ "Sin registro",
toupper(contacto_original) == "LPOPPE" ~ "LPOPPE",
toupper(contacto_original) == "JCRUSIUS" ~ "JCRUSIUS",
toupper(contacto_original) == "DFOLGER" ~ "DFOLGER",
toupper(contacto_original) == "BSCHWAB" ~ "BSCHWAB",
toupper(contacto_original) == "ABOHARA" ~ "ABOHARA",
toupper(contacto_original) == "PVALENTINE" ~ "PVALENTINE",
TRUE ~ "Sin registro" # Cualquier otro valor va aquí
)
# Fijamos el orden exacto deseado (7 categorías)
nivel_deseado <- c("Sin registro", "LPOPPE", "JCRUSIUS", "DFOLGER", "BSCHWAB", "ABOHARA", "PVALENTINE")
# Tabla de frecuencias con orden forzado
ni <- table(factor(contacto_reclas, levels = nivel_deseado))
# Frecuencia relativa %
hi <- round(prop.table(ni) * 100, 2)
# Crear tabla base
tabla_finalcontacto <- data.frame(
Contacto = names(ni),
ni = as.numeric(ni),
hi = as.numeric(hi)
)
# Fila total
fila_total <- data.frame(
Contacto = "TOTAL",
ni = sum(tabla_finalcontacto$ni),
hi = sum(tabla_finalcontacto$hi)
)
# Unir tabla
tabla_finalcontacto <- rbind(tabla_finalcontacto, fila_total)
# Mostrar
tabla_finalcontacto
## Contacto ni hi
## 1 Sin registro 9507 66.93
## 2 LPOPPE 1557 10.96
## 3 JCRUSIUS 6 0.04
## 4 DFOLGER 49 0.34
## 5 BSCHWAB 578 4.07
## 6 ABOHARA 1 0.01
## 7 PVALENTINE 2507 17.65
## 8 TOTAL 14205 100.00
**TABLA DE DISTRIBUCIÓN FINAL**
tabla_contacto_gt <- tabla_finalcontacto %>%
gt() %>%
tab_header(
title = md("**Tabla N° 1**"),
subtitle = md("Distribución de cantidad por CONTACT en Sedimentos Marinos")
) %>%
tab_source_note(source_note = md("Autor: Grupo 3")) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black",
row.striping.include_table_body = TRUE
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = Contacto == "TOTAL")
)
tabla_contacto_gt
| Tabla N° 1 | ||
| Distribución de cantidad por CONTACT en Sedimentos Marinos | ||
| Contacto | ni | hi |
|---|---|---|
| Sin registro | 9507 | 66.93 |
| LPOPPE | 1557 | 10.96 |
| JCRUSIUS | 6 | 0.04 |
| DFOLGER | 49 | 0.34 |
| BSCHWAB | 578 | 4.07 |
| ABOHARA | 1 | 0.01 |
| PVALENTINE | 2507 | 17.65 |
| TOTAL | 14205 | 100.00 |
| Autor: Grupo 3 | ||
Colores
**Colores de las barras**
colores <- gray.colors(length(ni), start = 0.3, end = 0.9)
Diagrama de cantidad Local
barplot(tabla_finalcontacto$ni[1:(nrow(tabla_finalcontacto)-1)],
main = "Gráfica Nº1: Distribución de cantidad por CONTACT Sedimentos Marinos ",
cex.main = 0.7,
col = "gray",
xlab = "Contacto",
ylab = "Cantidad (ni)",
names.arg = tabla_finalcontacto$Contacto[1:(nrow(tabla_finalcontacto)-1)],
las = 2) # Rotar etiquetas para mejor legibilidad
**Diagrama de cantidad global**
barplot(
tabla_finalcontacto$ni[1:(nrow(tabla_finalcontacto)-1)],
main = "Gráfica Nº2: Distribución de cantidad por CONTACT Sedimentos Marinos",
cex.main = 0.7,
xlab = "Contacto",
ylab = "Cantidad (ni)",
col = "gray",
names.arg = tabla_finalcontacto$Contacto[1:(nrow(tabla_finalcontacto)-1)],
ylim = c(0, 1090),
las = 2
)
**Diagrama de cantidad en porcentaje**
hi_local <- as.numeric(tabla_finalcontacto$hi[1:(nrow(tabla_finalcontacto)-1)])
barplot(
hi_local,
main = "Gráfica Nº3: Distribución en porcentaje por CONTACT Sedimentos Marinos",
cex.main = 0.7,
xlab = "Contacto",
ylab = "Porcentaje (%)",
col = "gray",
names.arg = tabla_finalcontacto$Contacto[1:(nrow(tabla_finalcontacto)-1)],
cex.names = 0.9,
ylim = c(0, 50),
las = 2
)
**Diagrama de cantidad en porcentaje global**
hi_global <- as.numeric(tabla_finalcontacto$hi[1:(nrow(tabla_finalcontacto)-1)])
barplot(
hi_global,
main = "Gráfica Nº4: Distribución en porcentaje por CONTACT Sedimentos Marinos",
cex.main = 0.7,
xlab = "Contacto",
ylab = "Porcentaje (%)",
col = "blue",
names.arg = tabla_finalcontacto$Contacto[1:(nrow(tabla_finalcontacto)-1)],
cex.names = 0.9,
ylim = c(0, 100),
las = 2
)
**DIAGRAMA DE CIRCULAR**
hi_contacto <- as.numeric(tabla_finalcontacto$hi[1:(nrow(tabla_finalcontacto)-1)])
contacto_cats <- tabla_finalcontacto$Contacto[1:(nrow(tabla_finalcontacto)-1)]
Colores <- colorRampPalette(c("lightskyblue", "darkblue"))(length(hi_contacto))
etiquetas <- paste0(hi_contacto, "%")
par(mfrow = c(1,2))
par(mar = c(2,2,4,2))
pie(
hi_contacto,
radius = 0.7,
col = Colores,
labels = etiquetas,
main = "Gráfica Nº5: Distribución en porcentaje por CONTACT Sedimentos Marinos",
cex.main = 0.9
)
plot.new()
legend(
"center",
title = "Contacto",
legend = contacto_cats,
fill = Colores,
cex = 0.7,
bg = "white",
box.lwd = 0.7
)
Indicadores Estadísticos
# Usamos la misma reclasificación que en la tabla/gráficas (para consistencia)
contacto_original <- datos$CONTACT
contacto_reclas <- case_when(
is.na(contacto_original) | contacto_original == "" | contacto_original == " " | contacto_original == "-"
~ "Sin registro",
toupper(contacto_original) == "LPOPPE" ~ "LPOPPE",
toupper(contacto_original) == "JCRUSIUS" ~ "JCRUSIUS",
toupper(contacto_original) == "DFOLGER" ~ "DFOLGER",
toupper(contacto_original) == "BSCHWAB" ~ "BSCHWAB",
toupper(contacto_original) == "ABOHARA" ~ "ABOHARA",
toupper(contacto_original) == "PVALENTINE" ~ "PVALENTINE",
TRUE ~ "Sin registro"
)
# Tabla de frecuencias sobre la variable reclasificada
tabla_frecuencia_contacto <- table(contacto_reclas)
# Calcular la moda (el valor que más se repite en la agrupación)
moda_contacto <- names(tabla_frecuencia_contacto)[which.max(tabla_frecuencia_contacto)]
# Crear tabla de indicadores
TablaIndicadores <- data.frame(
Variable = "Contacto (agrupado)",
Moda = moda_contacto
)
# Tabla simple con kable
kable(TablaIndicadores,
format = "markdown",
caption = "Tabla N°2. Indicadores estadísticos de posición (Moda) - Variable Contacto en Sedimentos Marinos",
align = c("l", "c"))
| Variable | Moda |
|---|---|
| Contacto (agrupado) | Sin registro |
# Tabla profesional con gt (consistente con Tabla N°1)
tabla_indicadores_gt <- TablaIndicadores %>%
gt() %>%
tab_header(
title = md("**Tabla N° 2**"),
subtitle = md("Indicadores estadísticos de posición (Moda) - Variable Contacto")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 3")
) %>%
cols_label(
Variable = md("**Variable**"),
Moda = md("**Moda**")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black"
) %>%
tab_style(
style = cell_text(weight = "bold", align = "center"),
locations = cells_column_labels()
)
tabla_indicadores_gt
| Tabla N° 2 | |
| Indicadores estadísticos de posición (Moda) - Variable Contacto | |
| Variable | Moda |
|---|---|
| Contacto (agrupado) | Sin registro |
| Autor: Grupo 3 | |
La variable Contacto tiene como valor más frecuente sin registro