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()
| 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