Manipulacion de un DataFrame usando dplr, usando 5 “verbos” “Select”.

Permite seleccionar las columnas (variables) de un dataframe.

Sintaxis simple:

“dataframe %>% select(columna1,columna2,…)”

Las columnas pueden ir en el orden que se desee (o que se necesite), no obligatoriamente en el orden en que aparecen en el dataframe.

Ejemplo 1:

Usando la base de datos de comercio exterior, para El Salvador, creada en la sesión anterior, seleccione las columnas de “pais”, “sac”,“anio”,“mes”,“valor_cif”.

#Cargar el DataFrame.
load("C:\\Users\\Rivera\\Downloads/data_comercio_exterior.RData")
#cargar paquetes (librerias)
library(dplyr)
library(kableExtra)

data_comercio_exterior %>% 
  select("pais","sac", "anio","mes","valor_cif") %>% 
  head() %>% 
  kable(caption = "ejemplo 1") %>% 
  kable_minimal()
ejemplo 1
pais sac anio mes valor_cif
Afganistan 4010390000 2017 04 58.06
Afganistan 6812999000 2017 04 88.38
Afganistan 8487900000 2017 04 20.93
Afganistan 8511800000 2017 04 98.93
Afganistan 8708930000 2017 04 62.18
Afganistan 9028200000 2017 04 130.06

“FILTER” Permite seleccionar las filas (casos) de un dataframe, con base en el cumplimiento de criterios.

dataframe %>% filter(columna1 operadores “criterio 1”,columna2 operadores "criterio 2,…)

Ejemplo 1: Seleccione todas las transacciones de exportación del año 2019, con Honduras o Guatemala, que sean superiores a los 100,000 US$.

library(dplyr)
data_comercio_exterior %>%
  select("pais","sac","anio","mes","valor_fob") %>%
  filter(anio=="2019", pais %in% c("Guatemala","Honduras"), valor_fob>100000)
## # A tibble: 2,889 x 5
##    pais      sac         anio mes   valor_fob
##    <chr>     <chr>      <dbl> <chr>     <dbl>
##  1 Guatemala 0105110000  2019 01      402629 
##  2 Guatemala 0403109000  2019 01      333543.
##  3 Guatemala 0406202000  2019 01      727621.
##  4 Guatemala 0406909000  2019 01      161111.
##  5 Guatemala 1101000000  2019 01      561071.
##  6 Guatemala 1102200000  2019 01      439248.
##  7 Guatemala 1103110000  2019 01      411861 
##  8 Guatemala 1516100000  2019 01      102949.
##  9 Guatemala 1517100000  2019 01      635279.
## 10 Guatemala 1604149000  2019 01      144881.
## # ... with 2,879 more rows

Ejemplo 2: Seleccione todas las transacciones, exportación e importación, para el último trimestre de cada año disponible en el dataframe, que se han realizado con México.

data_comercio_exterior %>%
  filter(pais=="Mexico",mes %in% 10:12) # 10:12 genera el vertor c(10,11,12)
## # A tibble: 12,939 x 8
##    pais  sac    anio mes   valor_cif kilogramos_impo~ valor_fob kilogramos_expo~
##    <chr> <chr> <dbl> <chr>     <dbl>            <dbl>     <dbl>            <dbl>
##  1 Mexi~ 0402~  2017 10         331.             31.2         0                0
##  2 Mexi~ 0403~  2017 10       51406.          41599.          0                0
##  3 Mexi~ 0406~  2017 10       29547.           8375.          0                0
##  4 Mexi~ 0406~  2017 10       38576.          17347.          0                0
##  5 Mexi~ 0703~  2017 10       78626.         536662           0                0
##  6 Mexi~ 0703~  2017 10        4958.          45500           0                0
##  7 Mexi~ 0703~  2017 10         545.            100           0                0
##  8 Mexi~ 0704~  2017 10        4478.           3464           0                0
##  9 Mexi~ 0705~  2017 10       10591.          10527           0                0
## 10 Mexi~ 0705~  2017 10        3931.           3430           0                0
## # ... with 12,929 more rows

Ejemplo 3: Seleccione todas las transacciones, exportación e importación, para el último trimestre de cada año disponible en el dataframe, y que excluyan el comercio con Canada, México y Estados Unidos.

library(purrr) #necesaria para la funcion perzonalizada `not_in%`
`%not_in%` <- purrr::negate(`%in%`) #esta función permite excluir los elementos que se incluyan en un vector.

data_comercio_exterior %>% 
  filter(mes %in% 10:12,
         pais %not_in% c("Canada","Mexico","Estados Unidos (U.S.A.)"))
## # A tibble: 159,347 x 8
##    pais  sac    anio mes   valor_cif kilogramos_impo~ valor_fob kilogramos_expo~
##    <chr> <chr> <dbl> <chr>     <dbl>            <dbl>     <dbl>            <dbl>
##  1 Afga~ 6913~  2017 12       650.               5.49         0                0
##  2 Afga~ 7326~  2017 12         2                0.01         0                0
##  3 Afga~ 6104~  2018 10      3153.            2408.           0                0
##  4 Afga~ 6104~  2018 10       946.             722.           0                0
##  5 Afga~ 6105~  2018 10      9405.            7181.           0                0
##  6 Afga~ 6106~  2018 10      1353.            1726.           0                0
##  7 Afga~ 6405~  2018 10      2260.            1726.           0                0
##  8 Afga~ 8206~  2018 10         6.56             5.02         0                0
##  9 Afga~ 0910~  2019 10      1821               34.9          0                0
## 10 Alba~ 3926~  2017 10        37.5            105            0                0
## # ... with 159,337 more rows

“MUTATE” Permiten agregar transformaciones de columnas (variables) de un dataframe. mutate agrega nuevas variables con la transformación de las columnas.

Sintaxis simple:

dataframe %>% mutate(nueva_variable= operaciones con variables,…)

Ejemplo 1: calcule el saldo de la balanza comercial para todas las transacciones, disponibles en la base de comercio exterior.

library(dplyr)
data_comercio_exterior %>%
  mutate(saldo_bc = valor_fob - valor_cif) %>%
  select("pais","sac","anio","mes","saldo_bc")
## # A tibble: 918,981 x 5
##    pais       sac         anio mes   saldo_bc
##    <chr>      <chr>      <dbl> <chr>    <dbl>
##  1 Afganistan 4010390000  2017 04       -58.1
##  2 Afganistan 6812999000  2017 04       -88.4
##  3 Afganistan 8487900000  2017 04       -20.9
##  4 Afganistan 8511800000  2017 04       -98.9
##  5 Afganistan 8708930000  2017 04       -62.2
##  6 Afganistan 9028200000  2017 04      -130. 
##  7 Afganistan 6913100000  2017 12      -650. 
##  8 Afganistan 7326209000  2017 12        -2  
##  9 Afganistan 0806200000  2018 06     -6448. 
## 10 Afganistan 6104220000  2018 10     -3153. 
## # ... with 918,971 more rows

Ejemplo 2: Calcule las exportaciones y las importaciones como porcentaje del comercio total, en cada transacción disponible en la base de comercio exterior, muestre sólo aquellas partidas que registren exportaciones.

options(scipen = 9999)
data_comercio_exterior %>%
  mutate(Xpt=round(valor_fob/(valor_cif+valor_fob)*100,2),
         Mpt=round(valor_fob/(valor_cif+valor_fob)*100,2)) %>%
  select("pais","sac","anio","mes","Xpt","Mpt") %>% filter(Xpt>0)
## # A tibble: 212,380 x 6
##    pais       sac         anio mes     Xpt   Mpt
##    <chr>      <chr>      <dbl> <chr> <dbl> <dbl>
##  1 Afganistan 3004909100  2019 09    100   100  
##  2 Albania    1701140000  2019 02    100   100  
##  3 Alemania   0602100000  2017 01     98.3  98.3
##  4 Alemania   0901113000  2017 01    100   100  
##  5 Alemania   3203000000  2017 01    100   100  
##  6 Alemania   3923409000  2017 01    100   100  
##  7 Alemania   4415200000  2017 01    100   100  
##  8 Alemania   4420100000  2017 01    100   100  
##  9 Alemania   5202990000  2017 01    100   100  
## 10 Alemania   5203000000  2017 01    100   100  
## # ... with 212,370 more rows

“ARRANGE” Permite ordenar las filas del dataframe(ascendente A-Z o descendente Z-A), por una o varias columnas (variables).

Sintaxis simple:

dataframe %>% arrange(variable 1, desc(variable 2), …)

Nota: si la ordenación que se requiere es descendente, escriba la variable dentro de la función desc(), como se indica en la sintaxis. Esta función fue implementada también al momento de generar la Base de Comercio Exterior que estamos usando.

Ejemplo: Ordenar los resultados del Ejemplo 2 de mutate, mostrando primero los resultados más recientes.

options(scipen = 99999)
data_comercio_exterior %>%
  mutate(Xpt=round(valor_fob/(valor_cif+valor_fob)*100,2),
         Mpt=round(valor_cif/(valor_cif+valor_fob)*100,2)) %>%
  select("pais","sac","anio","mes","Xpt","Mpt") %>% 
  filter(Xpt>0) %>%
  arrange(desc(anio),desc(mes))
## # A tibble: 212,380 x 6
##    pais     sac         anio mes      Xpt    Mpt
##    <chr>    <chr>      <dbl> <chr>  <dbl>  <dbl>
##  1 Alemania 0901113000  2020 07    100      0   
##  2 Alemania 0901210000  2020 07    100      0   
##  3 Alemania 1301909000  2020 07    100      0   
##  4 Alemania 1604149000  2020 07    100      0   
##  5 Alemania 2208401000  2020 07    100      0   
##  6 Alemania 3808930000  2020 07     90.4    9.65
##  7 Alemania 3901100000  2020 07    100      0   
##  8 Alemania 3926909900  2020 07      0.01 100.  
##  9 Alemania 4909000000  2020 07    100      0   
## 10 Alemania 5806200000  2020 07    100      0   
## # ... with 212,370 more rows

“SUMMARISE” Permite realizar operaciones de agregación de columnas (variables), de cualquier tipo, suma, producto, incluso funciones personalizadas.

Puede usarse en conjunto con group_by para obtener agregados a nivel de grupos.

Sintaxis simple:

dataframe %>% group_by(variable 1, variable 2…) %>% summarise(resultado 1= función de agregación(variable),resultado 2= función de agregación(variable)

Ejemplo 1: Obtenga los totales anuales de importaciones y exportaciones.

data_comercio_exterior %>% 
  group_by(anio) %>%
  summarise(`Total Exportaciones MM US$`=sum(valor_fob)/1e6,
            `Total Importaciones MM US$`=sum(valor_cif)/1e6)
## # A tibble: 4 x 3
##    anio `Total Exportaciones MM US$` `Total Importaciones MM US$`
##   <dbl>                        <dbl>                        <dbl>
## 1  2017                        5760.                       10572.
## 2  2018                        5905.                       11830.
## 3  2019                        5943.                       12018.
## 4  2020                        2662.                        5796.

Ejemplo 2: Obtenga los totales anuales de importaciones y exportaciones, que se realizan por país.

data_comercio_exterior %>% 
  group_by(pais,anio) %>%
  summarise(`Total Exportaciones`=sum(valor_fob),
            `Total Importaciones`=sum(valor_cif))
## # A tibble: 794 x 4
## # Groups:   pais [230]
##    pais        anio `Total Exportaciones` `Total Importaciones`
##    <chr>      <dbl>                 <dbl>                 <dbl>
##  1 Afganistan  2017                    0                  1111.
##  2 Afganistan  2018                    0                 23573.
##  3 Afganistan  2019                  382.                13114.
##  4 Albania     2017                    0                 12643.
##  5 Albania     2018                    0                 18307.
##  6 Albania     2019                51392.                25660.
##  7 Albania     2020                    0                115956.
##  8 Alemania    2017             24026197.            183179994.
##  9 Alemania    2018             20425283.            185817905.
## 10 Alemania    2019             21719980.            174500554.
## # ... with 784 more rows