setwd("/cloud/project")
# Cargar datos
datos <- read.csv("Depositos_Sulfuro.csv", header = TRUE, sep = ";", dec = ".")
# Cargar paquete necesario
if (!require(countrycode)) install.packages("countrycode")
## Loading required package: countrycode
library(countrycode)
# --- FUNCIÓN DE AJUSTE DE REDONDEO ---
# Esta función asegura que la columna de porcentajes sume exactamente 100
ajustar_redondeo <- function(df, col_freq, col_perc_raw, col_perc_final) {
# 1. Redondeo inicial
df[[col_perc_final]] <- round(df[[col_perc_raw]], 2)
# 2. Calcular el error
error <- 100 - sum(df[[col_perc_final]])
# 3. Encontrar el índice de la categoría con el mayor porcentaje sin redondear
indice_max <- which.max(df[[col_perc_raw]])
# 4. Aplicar el ajuste a esa categoría
df[[col_perc_final]][indice_max] <- df[[col_perc_final]][indice_max] + error
return(df)
}
# =================================================================
# TABLA POR PAÍS
# =================================================================
# 1. Tabla de frecuencia por país (ni)
TablaPais <- as.data.frame(table(datos$country))
colnames(TablaPais) <- c("Pais", "ni")
# 2. Calcular frecuencia relativa (hi_raw)
TablaPais$hi_raw <- (TablaPais$ni / sum(TablaPais$ni)) * 100
# 3. Aplicar ajuste de redondeo
TablaPais <- ajustar_redondeo(TablaPais, "ni", "hi_raw", "hi")
# 4. Seleccionar columnas finales
TablaPaisFinal <- TablaPais[, c("Pais", "ni", "hi")]
# 5. Fila TOTAL
total_pais <- data.frame(
Pais = "Total",
ni = sum(TablaPaisFinal$ni),
hi = sum(TablaPaisFinal$hi)
)
# 6. Unir tablas
TablaPaisFinal <- rbind(TablaPaisFinal, total_pais)
# =================================================================
# TABLA POR CONTINENTE
# =================================================================
# 1. Agregar continente a la tabla base de países
TablaPais$Continente <- countrycode(TablaPais$Pais,
origin = "country.name",
destination = "continent")
# 2. Tabla de frecuencia por continente (ni)
TablaContinente <- aggregate(ni ~ Continente, data = TablaPais, sum)
TablaContinente$Continente <- as.character(TablaContinente$Continente) # Necesario para la función aggregate
# 3. Calcular frecuencia relativa (hi_raw)
TablaContinente$hi_raw <- (TablaContinente$ni / sum(TablaContinente$ni)) * 100
# 4. Aplicar ajuste de redondeo
TablaContinente <- ajustar_redondeo(TablaContinente, "ni", "hi_raw", "hi")
# 5. Seleccionar columnas finales
TablaContinenteFinal <- TablaContinente[, c("Continente", "ni", "hi")]
# 6. Fila TOTAL
total_continente <- data.frame(
Continente = "Total",
ni = sum(TablaContinenteFinal$ni),
hi = sum(TablaContinenteFinal$hi)
)
# 7. Unir tablas
TablaContinenteFinal <- rbind(TablaContinenteFinal, total_continente)
# =================================================================
# MOSTRAR RESULTADOS
# =================================================================
## TABLA DE FRECUENCIAS POR PAÍS
print("--- TABLA DE FRECUENCIAS POR PAÍS ---")
## [1] "--- TABLA DE FRECUENCIAS POR PAÍS ---"
print(TablaPaisFinal)
## Pais ni hi
## 1 Argentina 2 0.18
## 2 Armenia 4 0.37
## 3 Australia 56 5.14
## 4 Bolivia 1 0.09
## 5 Brazil 3 0.28
## 6 Canada 317 29.07
## 7 Chile 2 0.18
## 8 China 37 3.39
## 9 Colombia 6 0.55
## 10 Cuba 13 1.19
## 11 Cyprus 18 1.65
## 12 Dominican Republic 3 0.28
## 13 Ecuador 2 0.18
## 14 Egypt 1 0.09
## 15 Eritrea 3 0.28
## 16 Fiji 3 0.28
## 17 Finland 12 1.10
## 18 France 4 0.37
## 19 Georgia 4 0.37
## 20 Great Britain 1 0.09
## 21 Guatemala 1 0.09
## 22 Guyana 2 0.18
## 23 India 2 0.18
## 24 Indonesia 4 0.37
## 25 Iran 2 0.18
## 26 Ireland 1 0.09
## 27 Japan 82 7.52
## 28 Kazakhstan 46 4.22
## 29 Mexico 16 1.47
## 30 Mongolia 1 0.09
## 31 Morocco 3 0.28
## 32 Norway 49 4.50
## 33 Oman 3 0.28
## 34 Pakistan 1 0.09
## 35 Peru 5 0.46
## 36 Philippines 19 1.74
## 37 Portugal 14 1.28
## 38 Russia 90 8.26
## 39 Saudi Arabia 21 1.93
## 40 Spain 61 5.60
## 41 Sweden 40 3.67
## 42 Turkey 26 2.39
## 43 Union of Myanmar 1 0.09
## 44 United States 100 9.17
## 45 Uzbekistan 5 0.46
## 46 Venezuela 3 0.28
## 47 Total 1090 100.00
## TABLA DE FRECUENCIAS POR CONTINENTE
print("--- TABLA DE FRECUENCIAS POR CONTINENTE ---")
## [1] "--- TABLA DE FRECUENCIAS POR CONTINENTE ---"
print(TablaContinenteFinal)
## Continente ni hi
## 1 Africa 7 0.64
## 2 Americas 476 43.68
## 3 Asia 276 25.32
## 4 Europe 272 24.95
## 5 Oceania 59 5.41
## 6 Total 1090 100.00