library(readr)
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(tidyr)
library(kableExtra)
## 
## Adjuntando el paquete: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# Directorio de trabajo para importaciones
setwd("C:/Users/crist/Downloads/comercio exter/impo") #Cambiar las plecas al otro lado selecciona la carpeta y el documento debe ser cvs, no olvidar cargar las librerias

# Lectura masiva de archivos delimitados por pipe (|)
archivos_importar <- list.files()

lista_importacion <- lapply(
  archivos_importar,
  FUN = read_delim,
  delim = "|",
  col_names = c("pais", "sac", "anio", "mes", "valor_cif", "kilogramos"),
  col_types = cols(
    pais = "c",
    sac = "c",
    anio = "d",
    mes = "d",
    valor_cif = "d",
    kilogramos = "d"
  ),
  skip = 1
)

# Ensamblar dataframes en un único objeto
data_importaciones <- bind_rows(lista_importacion)

# Visualización de muestra
data_importaciones %>% 
  head() %>% 
  kable(
    format = "html", 
    caption = "El Salvador: Base Muestra de Importaciones",
    align = "c"
  ) %>% 
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = TRUE, 
    position = "center"
  ) %>% 
  add_footnote(label = "Fuente: Elaboración propia con base en datos del Banco Central de Reserva (BCR)", notation = "symbol")
El Salvador: Base Muestra de Importaciones
pais sac anio mes valor_cif kilogramos
GROENLANDIA 3814001000 2022 5 3795.41 633.22
CANADA 0511100000 2022 4 17565.11 38.00
CANADA 0712209000 2022 3 512.59 118.73
CANADA 0712209000 2022 6 499.48 92.13
CANADA 0712909000 2022 3 2231.66 729.32
CANADA 0713200000 2022 3 1522.28 1881.60
* Fuente: Elaboración propia con base en datos del Banco Central de Reserva (BCR)
# Direcciones de trabajo para Exportaciones
setwd("C:/Users/crist/Downloads/comercio exter/expo")

# Lectura masiva de archivos
archivos_exportar <- list.files()

lista_exportacion <- lapply(
  archivos_exportar,
  FUN = read_delim,
  delim = "|",
  col_names = c("pais", "sac", "anio", "mes", "valor_fob", "kilogramos"),
  col_types = cols(
    pais = "c",
    sac = "c",
    anio = "d",
    mes = "d",
    valor_fob = "d",
    kilogramos = "d"
  ),
  skip = 1
)

# Ensamblar dataframes en un único objeto
data_exportaciones <- bind_rows(lista_exportacion)

# Visualización de muestra
data_exportaciones %>% 
  head() %>% 
  kable(
    format = "html", 
    caption = "El Salvador: Base Muestra de Exportaciones", 
    align = "c"
  ) %>% 
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = TRUE, 
    position = "center"
  ) %>% 
  add_footnote(label = "Fuente: Elaboración propia con base en datos del Banco Central de Reserva (BCR)", notation = "symbol")
El Salvador: Base Muestra de Exportaciones
pais sac anio mes valor_fob kilogramos
CANADA 0106190000 2022 6 600.00 9.98
CANADA 0106200000 2022 6 4620.00 10.00
CANADA 0602100000 2022 1 1055690.77 16511.64
CANADA 0602100000 2022 2 819959.20 12047.40
CANADA 0602100000 2022 3 253333.70 2928.69
CANADA 0602100000 2022 4 49719.91 639.52
* Fuente: Elaboración propia con base en datos del Banco Central de Reserva (BCR)
# Unir flujos comerciales por llaves principales
data_comercio_exterior <- data_importaciones %>% 
  full_join(
    data_exportaciones,
    by = c("pais", "sac", "anio", "mes"),
    suffix = c("_importaciones", "_exportaciones")
  ) %>% 
  replace_na(
    list(
      valor_cif = 0,
      valor_fob = 0,
      kilogramos_importaciones = 0,
      kilogramos_exportaciones = 0
    )
  ) %>% 
  arrange(pais, anio, mes, sac)

# PUNTO 1 de la guía: tabla consolidada, aún sin nombres ISO de países, head de 10 casos
data_comercio_exterior %>%
  mutate(across(where(is.character), ~ iconv(.x, from = "", to = "UTF-8", sub = ""))) %>%
  head(10) %>% 
  kable(
    format = "html",
    caption = "Base Consolidada de Comercio Exterior de El Salvador",
    align = "c"
  ) %>% 
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = TRUE, 
    position = "center"
  ) %>% 
  add_footnote(label = "Fuente: Elaboración propia con base en datos del BCR", notation = "symbol")
Base Consolidada de Comercio Exterior de El Salvador
pais sac anio mes valor_cif kilogramos_importaciones valor_fob kilogramos_exportaciones
AFGANISTAN 8708990000 2022 2 220.50 0.29 0 0
AFGANISTAN 8471900000 2022 5 665.90 4.00 0 0
AFGANISTAN 5702310000 2022 6 913.74 22.02 0 0
AFGANISTAN 5702502000 2022 6 566.35 11.36 0 0
AFGANISTAN 6111200000 2022 8 213.69 1.56 0 0
AFGANISTAN 8536509000 2022 9 42.28 2.00 0 0
AFGANISTAN 6210400000 2023 7 204.75 0.10 0 0
AFGANISTAN 0901210000 2024 4 0.00 0.00 440 21
AFGANISTAN 4909000000 2024 4 0.07 0.15 0 0
AFGANISTAN 8473300000 2024 6 60.18 1.00 0 0
* Fuente: Elaboración propia con base en datos del BCR
# Guardar objeto en formato binario de R (.RData)
save(
  data_comercio_exterior, 
  file = "C:/Users/crist/OneDrive/Documentos/TAREAS DE R/Exportaciones/data_comercio_exterior.RData")
# Carga directa del objeto de datos previamente procesado
load("C:/Users/crist/OneDrive/Documentos/TAREAS DE R/Exportaciones/data_comercio_exterior.RData")
# Carga de script de funciones (aquí es donde data_comercio_exterior recibe
# el join con nombres_iso_paises.xlsx, es decir, ya trae iso_3, región, etc.)
source(
  file = "C:/Users/crist/Downloads/funciones_comercio_exterior.R",
  echo = TRUE,
  max.deparse.length = 100,
  encoding = "utf-8"
)
## 
## > options(scipen = 999)
## 
## > library(dplyr)
## 
## > library(readxl)
## 
## > library(stringr)
## 
## > load("C:/Users/crist/OneDrive/Documentos/TAREAS DE R/Exportaciones/data_comercio_exterior.RData")
## 
## > nombre_archivo <- "C:/Users/crist/Downloads/nombres_iso_paises.xlsx"
## 
## > nombres_iso_paises <- read_excel(nombre_archivo)
## 
## > nombres_iso_paises$nom_pais_esp <- toupper(nombres_iso_paises$nom_pais_esp)
## 
## > data_comercio_exterior <- data_comercio_exterior %>% 
## +     left_join(nombres_iso_paises, by = c(p .... [TRUNCATED] 
## 
## > herramientas_mostrar_paises <- function() {
## +     paises <- nombres_iso_paises %>% select(nom_pais .... [TRUNCATED] 
## 
## > herramientas_mostrar_regiones <- function() {
## +     nombres_iso_paises %>% group_by(region, cod_re .... [TRUNCATED] 
## 
## > herramientas_mostrar_paises_en_tabla <- function() {
## +     data_comercio_exterior %>% group_by(pai .... [TRUNCATED] 
## 
## > indicadores_IVCR_capitulo <- function(codigo_pais, 
## +     capitulo, anio) {
## +     codigo_pais <- e .... [TRUNCATED] 
## 
## > indicadores_IVCR_partida <- function(codigo_pais, 
## +     partida, anio) {
## +     codigo_pais <- enq .... [TRUNCATED] 
## 
## > indicadores_Balassa_capitulo <- function(codigo_pais, 
## +     capitulo, anio, normalizado = TRUE) { .... [TRUNCATED] 
## 
## > indicadores_Balassa_partida <- function(codigo_pais, 
## +     partida, anio, normalizado = TRUE) {
## + .... [TRUNCATED] 
## 
## > indicadores_IHH_Herfindahl_Hirschmann_anual_texto <- function(codigo_pais, 
## +     anio, normalizad .... [TRUNCATED] 
## 
## > indicadores_IHH_Herfindahl_Hirschmann_anual <- function(codigo_pais, 
## +     anio, normalizado = TR .... [TRUNCATED]
# Mostrar primeros países del catálogo
herramientas_mostrar_paises() %>% 
  head() %>% 
  kable(caption = "Catálogo de Países", align = "c") %>% 
  kable_material(html_font = "sans-serif")
Catálogo de Países
nom_pais_esp codigo_pais region cod_region region_intermedia cod_region_intermedia
AFGANISTAN 4 Asia 142 NA NA
ALBANIA 8 Europa 150 NA NA
ALEMANIA 276 Europa 150 NA NA
ANDORRA 20 Europa 150 NA NA
ANGOLA 24 África 2 África Central 17
ANGUILA (R.U.) 660 Américas 19 Caribe 29
# Mostrar regiones
herramientas_mostrar_regiones() %>% 
  head() %>% 
  kable(caption = "Catálogo de Regiones", align = "c") %>% 
  kable_material(html_font = "sans-serif")
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by region, cod_region, region_intermedia, and
##   cod_region_intermedia.
## ℹ Output is grouped by region, cod_region, and region_intermedia.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(region, cod_region, region_intermedia,
##   cod_region_intermedia))` for per-operation grouping (`?dplyr::dplyr_by`)
##   instead.
Catálogo de Regiones
region cod_region region_intermedia cod_region_intermedia # de Paises incluidos
Américas 19 Caribe 29 26
Américas 19 Centroamérica 13 8
Américas 19 Sudamerica 5 13
Américas 19 NA NA 5
Asia 142 NA NA 50
Europa 150 Islas Del Canal 830 1
# Mostrar catálogo general en formato tabla
herramientas_mostrar_paises_en_tabla() %>% 
  head() %>% 
  kable(caption = "Matriz Geográfica Completa", align = "c") %>% 
  kable_material(html_font = "sans-serif")
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by pais and anio.
## ℹ Output is grouped by pais.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(pais, anio))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
Matriz Geográfica Completa
pais anio # Transacciones
AFGANISTAN 2022 6
AFGANISTAN 2023 1
AFGANISTAN 2024 5
AFGANISTAN 2025 8
AFGANISTAN 2026 1
ALBANIA 2022 22
# PUNTO 2 de la guía: la base consolidada ya trae la información estandarizada
# de países (iso_3, nombre, región) desde que se cargó el source(). Solo se muestra.
data_comercio_exterior %>% 
  head(10) %>% 
  kable(
    format = "html",
    caption = "Base Consolidada de Comercio Exterior con Información Estandarizada de Países",
    align = "c"
  ) %>% 
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = TRUE, 
    position = "center"
  ) %>% 
  add_footnote(label = "Fuente: Elaboración propia con base en datos del BCR", notation = "symbol")
Base Consolidada de Comercio Exterior con Información Estandarizada de Países
pais sac anio mes valor_cif kilogramos_importaciones valor_fob kilogramos_exportaciones nom_pais_ingles iso_2 iso_3 codigo_pais region cod_region sub_region cod_sub_region region_intermedia cod_region_intermedia
AFGANISTAN 8708990000 2022 2 220.50 0.29 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 8471900000 2022 5 665.90 4.00 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 5702310000 2022 6 913.74 22.02 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 5702502000 2022 6 566.35 11.36 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 6111200000 2022 8 213.69 1.56 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 8536509000 2022 9 42.28 2.00 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 6210400000 2023 7 204.75 0.10 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 0901210000 2024 4 0.00 0.00 440 21 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 4909000000 2024 4 0.07 0.15 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
AFGANISTAN 8473300000 2024 6 60.18 1.00 0 0 Afghanistan AF AFG 4 Asia 142 Asia Meridional 34 NA NA
* Fuente: Elaboración propia con base en datos del BCR
# Cálculo de IVCR para el capítulo '01' (2022-2026)
Resultados_IVCR <- data.frame(
  "años" = 2022:2026,
  "IVCR" = sapply(
    X = 2022:2026, 
    FUN = indicadores_IVCR_capitulo, 
    codigo_pais = 840, 
    capitulo = "01"
  )
)

Resultados_IVCR %>% 
  kable(align = "c", caption = "Evolución del Índice IVCR (Capítulo 01)") %>% 
  kable_material(html_font = "sans-serif")
Evolución del Índice IVCR (Capítulo 01)
años IVCR
2022 -0.1519356
2023 -0.1973216
2024 -0.2803035
2025 -0.2512482
2026 -0.2419462
# Cálculo de Índice de Balassa para el capítulo '01' (2023-2024)
Resultados_Balassa <- data.frame(
  "años" = 2022:2026,
  "IB" = sapply(
    X = 2022:2026, 
    FUN = indicadores_Balassa_capitulo, 
    codigo_pais = 840, 
    capitulo = "01"
  )
)

Resultados_Balassa %>% 
  kable(align = "c", caption = "Evolución del Índice de Balassa (Capítulo 01)") %>% 
  kable_material(html_font = "sans-serif")
Evolución del Índice de Balassa (Capítulo 01)
años IB
2022 0.5412339
2023 0.4862753
2024 0.5094811
2025 0.3896520
2026 0.4931593
# PUNTO 3 de la guía: ranking anual del top 5 de socios comerciales, 2022-2026
#Seleccionar Años
anios_ranking<-2022:2026
data_comercio_exterior %>% 
  filter(anio %in% anios_ranking) ->data_ranking

data_ranking %>% 
  group_by(anio,iso_3) %>% 
  summarise(total=sum(valor_fob)) %>% mutate(percent=round(prop.table(total)*100,2)) %>% 
  slice_max(n = 5,order_by = total) %>% 
  as.data.frame() %>% 
  group_by(anio) %>% 
  arrange(anio, desc(total)) %>% 
  mutate(rank = row_number(),
         data=paste(iso_3," | ",percent,sep = "")) %>% 
  select(anio,data,rank) %>% as.data.frame() -> insumo_reporte
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by anio and iso_3.
## ℹ Output is grouped by anio.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(anio, iso_3))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
print(insumo_reporte)
##    anio        data rank
## 1  2022 USA | 38.78    1
## 2  2022 GTM | 17.05    2
## 3  2022 HND | 16.65    3
## 4  2022  NIC | 6.98    4
## 5  2022  CRI | 4.27    5
## 6  2023  USA | 35.6    1
## 7  2023 GTM | 18.45    2
## 8  2023  HND | 16.3    3
## 9  2023  NIC | 7.85    4
## 10 2023  CRI | 4.79    5
## 11 2024 USA | 33.84    1
## 12 2024 GTM | 19.53    2
## 13 2024 HND | 16.14    3
## 14 2024  NIC | 8.94    4
## 15 2024  CRI | 4.71    5
## 16 2025 USA | 32.45    1
## 17 2025 GTM | 19.64    2
## 18 2025 HND | 16.74    3
## 19 2025  NIC | 9.12    4
## 20 2025  CRI | 4.45    5
## 21 2026 USA | 32.53    1
## 22 2026 GTM | 19.46    2
## 23 2026 HND | 15.44    3
## 24 2026   NIC | 8.7    4
## 25 2026  CRI | 4.51    5
library(tidyr)
insumo_reporte %>% 
pivot_wider(names_from = rank,values_from = data)->mi_tabla
print(mi_tabla)
## # A tibble: 5 × 6
##    anio `1`         `2`         `3`         `4`        `5`       
##   <dbl> <chr>       <chr>       <chr>       <chr>      <chr>     
## 1  2022 USA | 38.78 GTM | 17.05 HND | 16.65 NIC | 6.98 CRI | 4.27
## 2  2023 USA | 35.6  GTM | 18.45 HND | 16.3  NIC | 7.85 CRI | 4.79
## 3  2024 USA | 33.84 GTM | 19.53 HND | 16.14 NIC | 8.94 CRI | 4.71
## 4  2025 USA | 32.45 GTM | 19.64 HND | 16.74 NIC | 9.12 CRI | 4.45
## 5  2026 USA | 32.53 GTM | 19.46 HND | 15.44 NIC | 8.7  CRI | 4.51
mi_tabla %>%
  kable(
    col.names = c("Año", "1", "2", "3", "4", "5"),
    caption = paste("Top",5,"de Exportaciones periodo",
    min(anios_ranking),"-",max(anios_ranking))) %>%
  add_footnote(label = "Elaboración propia con base en datos del BCR") 
Top 5 de Exportaciones periodo 2022 - 2026
Año 1 2 3 4 5
2022 USA | 38.78 GTM | 17.05 HND | 16.65 NIC | 6.98 CRI | 4.27
2023 USA | 35.6 GTM | 18.45 HND | 16.3 NIC | 7.85 CRI | 4.79
2024 USA | 33.84 GTM | 19.53 HND | 16.14 NIC | 8.94 CRI | 4.71
2025 USA | 32.45 GTM | 19.64 HND | 16.74 NIC | 9.12 CRI | 4.45
2026 USA | 32.53 GTM | 19.46 HND | 15.44 NIC | 8.7 CRI | 4.51

Note: aElaboración propia con base en datos del BCR