Manipulacion de Dataframe atraves de dplyr.

Manejo de un dataframe.

Selec

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”.

#Cargamos el dataframe data_comercio_exterior
load("C:/Users/Melvin/Desktop/Metodos/comercio_ exterior/data_comercio_exterior.RData")

#Cargamos el paquete "dplyr"
library(dplyr)
library(kableExtra) #Sólo es para formato de las tablas de estos apuntes

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)
library(kableExtra)
data_comercio_exterior %>%
  select("pais", "sac","anio","mes","valor_fob") %>%
  filter(anio=="2019", pais %in% c("Guatemala","Honduras"),valor_fob>100000)%>%
   head() %>% kable(caption = "Ejemplo 1 Filter") %>% kable_minimal()
Ejemplo 1 Filter
pais sac anio mes valor_fob
Guatemala 0105110000 2019 01 402629.0
Guatemala 0403109000 2019 01 333543.0
Guatemala 0406202000 2019 01 727621.4
Guatemala 0406909000 2019 01 161110.7
Guatemala 1101000000 2019 01 561071.4
Guatemala 1102200000 2019 01 439247.5

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 vector c(10,11,12)
   head() %>% kable(caption = "Ejemplo 2 Filter") %>% kable_minimal()
Ejemplo 2 Filter
pais sac anio mes valor_cif kilogramos_importaciones valor_fob kilogramos_exportaciones
Mexico 0402991000 2017 10 330.77 31.20 0 0
Mexico 0403109000 2017 10 51405.81 41599.26 0 0
Mexico 0406109000 2017 10 29547.08 8375.40 0 0
Mexico 0406909000 2017 10 38576.24 17346.65 0 0
Mexico 0703101200 2017 10 78626.28 536662.00 0 0
Mexico 0703101300 2017 10 4958.50 45500.00 0 0

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) #librería necesaria para la función personalizada `%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.)"))%>%
head() %>% kable(caption = "Ejemplo 3 Filter") %>% kable_minimal()
Ejemplo 3 Filter
pais sac anio mes valor_cif kilogramos_importaciones valor_fob kilogramos_exportaciones
Afganistan 6913100000 2017 12 650.43 5.49 0 0
Afganistan 7326209000 2017 12 2.00 0.01 0 0
Afganistan 6104220000 2018 10 3153.37 2407.61 0 0
Afganistan 6104620000 2018 10 946.01 722.28 0 0
Afganistan 6105100000 2018 10 9405.39 7181.03 0 0
Afganistan 6106100000 2018 10 1353.32 1725.55 0 0

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.

data_comercio_exterior %>% 
  mutate(saldo_bc=valor_fob-valor_cif) %>% 
  select("pais","sac","anio","mes","saldo_bc")%>%
  head() %>% kable(caption = "Ejemplo 1") %>% kable_minimal()
Ejemplo 1
pais sac anio mes saldo_bc
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

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 = 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)%>%
head() %>% kable(caption = "Ejemplo 2") %>% kable_minimal()
Ejemplo 2
pais sac anio mes Xpt Mpt
Afganistan 3004909100 2019 09 100.00 0.00
Albania 1701140000 2019 02 100.00 0.00
Alemania 0602100000 2017 01 98.34 1.66
Alemania 0901113000 2017 01 100.00 0.00
Alemania 3203000000 2017 01 100.00 0.00
Alemania 3923409000 2017 01 100.00 0.00

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))%>% #ordena de forma ascedente 
  head() %>% kable(caption = "Ejemplo 2") %>% kable_minimal()
Ejemplo 2
pais sac anio mes Xpt Mpt
Alemania 0901113000 2020 07 100.00 0.00
Alemania 0901210000 2020 07 100.00 0.00
Alemania 1301909000 2020 07 100.00 0.00
Alemania 1604149000 2020 07 100.00 0.00
Alemania 2208401000 2020 07 100.00 0.00
Alemania 3808930000 2020 07 90.35 9.65

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)%>%
  head() %>% kable(caption = "Ejemplo 1") %>% kable_minimal()
Ejemplo 1
anio Total Exportaciones MM US$ Total Importaciones MM US$
2017 5760.015 10571.509
2018 5904.627 11829.783
2019 5943.316 12017.559
2020 2661.861 5795.689

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))%>%
  head() %>% kable(caption = "Ejemplo 2") %>% kable_minimal()
## `summarise()` regrouping output by 'pais' (override with `.groups` argument)
Ejemplo 2
pais anio Total Exportaciones Total Importaciones
Afganistan 2017 0.00 1110.97
Afganistan 2018 0.00 23573.11
Afganistan 2019 382.13 13113.77
Albania 2017 0.00 12643.03
Albania 2018 0.00 18307.36
Albania 2019 51392.50 25660.16