Para la manipulación de un dataframe, usando dplyr, lo básico será aprender 5 “verbos” o comandos de manipulación:
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("G:/Metodos 2020/comercio/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()
| pais | sac | anio | mes | valor_cif |
|---|---|---|---|---|
| Afganistan | 4010390000 | 2017 | 4 | 58.06 |
| Afganistan | 6812999000 | 2017 | 4 | 88.38 |
| Afganistan | 8487900000 | 2017 | 4 | 20.93 |
| Afganistan | 8511800000 | 2017 | 4 | 98.93 |
| Afganistan | 8708930000 | 2017 | 4 | 62.18 |
| Afganistan | 9028200000 | 2017 | 4 | 130.06 |
Se recomienda leer sobre la referencia completa de select (en inglés)
Permite seleccionar las filas (casos) de un dataframe, con base en el cumplimiento de criterios.
Sintaxis simple:
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> <dbl> <dbl>
## 1 Guatemala 0105110000 2019 1 402629
## 2 Guatemala 0403109000 2019 1 333543.
## 3 Guatemala 0406202000 2019 1 727621.
## 4 Guatemala 0406909000 2019 1 161111.
## 5 Guatemala 1101000000 2019 1 561071.
## 6 Guatemala 1102200000 2019 1 439248.
## 7 Guatemala 1103110000 2019 1 411861
## 8 Guatemala 1516100000 2019 1 102949.
## 9 Guatemala 1517100000 2019 1 635279.
## 10 Guatemala 1604149000 2019 1 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 vector 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> <dbl> <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) #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.)"))
## # A tibble: 159,347 x 8
## pais sac anio mes valor_cif kilogramos_impo~ valor_fob kilogramos_expo~
## <chr> <chr> <dbl> <dbl> <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
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")
## # A tibble: 918,981 x 5
## pais sac anio mes saldo_bc
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 Afganistan 4010390000 2017 4 -58.1
## 2 Afganistan 6812999000 2017 4 -88.4
## 3 Afganistan 8487900000 2017 4 -20.9
## 4 Afganistan 8511800000 2017 4 -98.9
## 5 Afganistan 8708930000 2017 4 -62.2
## 6 Afganistan 9028200000 2017 4 -130.
## 7 Afganistan 6913100000 2017 12 -650.
## 8 Afganistan 7326209000 2017 12 -2
## 9 Afganistan 0806200000 2018 6 -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 = 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)
## # A tibble: 212,380 x 6
## pais sac anio mes Xpt Mpt
## <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Afganistan 3004909100 2019 9 100 0
## 2 Albania 1701140000 2019 2 100 0
## 3 Alemania 0602100000 2017 1 98.3 1.66
## 4 Alemania 0901113000 2017 1 100 0
## 5 Alemania 3203000000 2017 1 100 0
## 6 Alemania 3923409000 2017 1 100 0
## 7 Alemania 4415200000 2017 1 100 0
## 8 Alemania 4420100000 2017 1 100 0
## 9 Alemania 5202990000 2017 1 100 0
## 10 Alemania 5203000000 2017 1 100 0
## # ... with 212,370 more rows
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> <dbl> <dbl> <dbl>
## 1 Alemania 0901113000 2020 7 100 0
## 2 Alemania 0901210000 2020 7 100 0
## 3 Alemania 1301909000 2020 7 100 0
## 4 Alemania 1604149000 2020 7 100 0
## 5 Alemania 2208401000 2020 7 100 0
## 6 Alemania 3808930000 2020 7 90.4 9.65
## 7 Alemania 3901100000 2020 7 100 0
## 8 Alemania 3926909900 2020 7 0.01 100.
## 9 Alemania 4909000000 2020 7 100 0
## 10 Alemania 5806200000 2020 7 100 0
## # ... with 212,370 more rows
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