Para la manipulación de un dataframe, usando dplyr, lo básico será aprender 5 “verbos” o comandos de manipulación:
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.
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/usuario/Documents/Metodos/bases de datos_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")
## # A tibble: 1,078,517 × 5
## pais sac anio mes valor_cif
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 Afganistan 2018 6 6448. 1464.
## 2 Afganistan 4010390000 2017 4 58.1
## 3 Afganistan 6812999090 2017 4 88.4
## 4 Afganistan 8487900000 2017 4 20.9
## 5 Afganistan 8511800000 2017 4 98.9
## 6 Afganistan 8708930000 2017 4 62.2
## 7 Afganistan 9028200000 2017 4 130.
## 8 Afganistan 6913100000 2017 12 650.
## 9 Afganistan 7326209000 2017 12 2
## 10 Afganistan 6104220000 2018 10 3153.
## # … with 1,078,507 more rows
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,…)
library(dplyr)
library(kableExtra) #Sólo es para formato de las tablas de estos apuntes
data_comercio_exterior %>%
select("pais", "sac","anio","mes","valor_fob") %>%
filter(anio== 2019, pais %in% c("Guatemala", "Honduras"), valor_fob> 100000)
## # A tibble: 2,925 × 5
## pais sac anio mes valor_fob
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 Guatemala 0105110000 2019 1 108886.
## 2 Guatemala 0202300000 2019 1 460468.
## 3 Guatemala 0207120000 2019 1 266657.
## 4 Guatemala 0603110000 2019 1 138516.
## 5 Guatemala 0701900000 2019 1 1861870.
## 6 Guatemala 0702000000 2019 1 484976.
## 7 Guatemala 0703101200 2019 1 258420.
## 8 Guatemala 0704100000 2019 1 301069.
## 9 Guatemala 0704900000 2019 1 709192.
## 10 Guatemala 0705110000 2019 1 305408.
## # … with 2,915 more rows
data_comercio_exterior %>%
filter(pais=="Mexico",mes %in% 10:12) # 10:12 genera el vector c(10,11,12)
## # A tibble: 20,767 × 8
## pais sac anio mes valor_cif kilogramos_importac…¹ valor…² kilog…³
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Mexico 0402991000 2017 10 331. 31.2 331. 3.12e1
## 2 Mexico 0403209000 2017 10 51406. 41599. 51406. 4.16e4
## 3 Mexico 0406109000 2017 10 29547. 8375. 29547. 8.38e3
## 4 Mexico 0406909000 2017 10 38576. 17347. 38576. 1.73e4
## 5 Mexico 0703101200 2017 10 78626. 536662 78626. 5.37e5
## 6 Mexico 0703101300 2017 10 4958. 45500 4958. 4.55e4
## 7 Mexico 0703200000 2017 10 545. 100 545. 1 e2
## 8 Mexico 0704100000 2017 10 4478. 3464 4478. 3.46e3
## 9 Mexico 0705110000 2017 10 10591. 10527 10591. 1.05e4
## 10 Mexico 0705190000 2017 10 3931. 3430 3931. 3.43e3
## # … with 20,757 more rows, and abbreviated variable names
## # ¹kilogramos_importaciones, ²valor_fob, ³kilogramos_exportaciones
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: 253,709 × 8
## pais sac anio mes valor_cif kilogramos_impo…¹ valor…² kilog…³
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Afganistan 6913100000 2017 12 650. 5.49 650. 5.49
## 2 Afganistan 7326209000 2017 12 2 0.01 2 0.01
## 3 Afganistan 6104220000 2018 10 3153. 2408. 3153. 2408.
## 4 Afganistan 6104620000 2018 10 946. 722. 946. 722.
## 5 Afganistan 6105100000 2018 10 9405. 7181. 9405. 7181.
## 6 Afganistan 6106100000 2018 10 1353. 1726. 1353. 1726.
## 7 Afganistan 6405900000 2018 10 2260. 1726. 2260. 1726.
## 8 Afganistan 8206000000 2018 10 6.56 5.02 6.56 5.02
## 9 Afganistan 0910200000 2019 10 1821 34.9 1821 34.9
## 10 Afganistan 9018900000 2020 11 501. 19 501. 19
## # … with 253,699 more rows, and abbreviated variable names
## # ¹kilogramos_importaciones, ²valor_fob, ³kilogramos_exportaciones
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,…)
data_comercio_exterior %>%
mutate(saldo_bc=valor_fob-valor_cif) %>%
select("pais","sac","anio","mes","saldo_bc")
## # A tibble: 1,078,517 × 5
## pais sac anio mes saldo_bc
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 Afganistan 2018 6 6448. 0
## 2 Afganistan 4010390000 2017 4 0
## 3 Afganistan 6812999090 2017 4 0
## 4 Afganistan 8487900000 2017 4 0
## 5 Afganistan 8511800000 2017 4 0
## 6 Afganistan 8708930000 2017 4 0
## 7 Afganistan 9028200000 2017 4 0
## 8 Afganistan 6913100000 2017 12 0
## 9 Afganistan 7326209000 2017 12 0
## 10 Afganistan 6104220000 2018 10 0
## # … with 1,078,507 more rows
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: 1,078,517 × 6
## pais sac anio mes Xpt Mpt
## <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Afganistan 2018 6 6448. 50 50
## 2 Afganistan 4010390000 2017 4 50 50
## 3 Afganistan 6812999090 2017 4 50 50
## 4 Afganistan 8487900000 2017 4 50 50
## 5 Afganistan 8511800000 2017 4 50 50
## 6 Afganistan 8708930000 2017 4 50 50
## 7 Afganistan 9028200000 2017 4 50 50
## 8 Afganistan 6913100000 2017 12 50 50
## 9 Afganistan 7326209000 2017 12 50 50
## 10 Afganistan 6104220000 2018 10 50 50
## # … with 1,078,507 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.
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: 1,078,517 × 6
## pais sac anio mes Xpt Mpt
## <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Afganistan 5702502000 2022 6 50 50
## 2 Albania 8463900000 2022 6 50 50
## 3 Albania 9017100000 2022 6 50 50
## 4 Alemania 0402911000 2022 6 50 50
## 5 Alemania 0402991000 2022 6 50 50
## 6 Alemania 0602100000 2022 6 50 50
## 7 Alemania 1105201000 2022 6 50 50
## 8 Alemania 1107100000 2022 6 50 50
## 9 Alemania 1107200000 2022 6 50 50
## 10 Alemania 1108130000 2022 6 50 50
## # … with 1,078,507 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)
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: 12 × 3
## anio `Total Exportaciones MM US$` `Total Importaciones MM US$`
## <dbl> <dbl> <dbl>
## 1 1 737. 737.
## 2 2 667. 667.
## 3 3 810. 810.
## 4 4 885. 885.
## 5 5 770. 770.
## 6 6 822. 822.
## 7 2017 10572. 10572.
## 8 2018 5901. 5901.
## 9 2019 11602. 11602.
## 10 2020 10248. 10248.
## 11 2021 15076. 15076.
## 12 2022 8934. 8934.
data_comercio_exterior %>%
group_by(pais,anio) %>%
summarise(`Total Exportaciones`=sum(valor_fob),
`Total Importaciones`=sum(valor_cif))
## `summarise()` has grouped output by 'pais'. You can override using the
## `.groups` argument.
## # A tibble: 1,869 × 4
## # Groups: pais [239]
## pais anio `Total Exportaciones` `Total Importaciones`
## <chr> <dbl> <dbl> <dbl>
## 1 Afganistan 6 1464. 1464.
## 2 Afganistan 2017 1111. 1111.
## 3 Afganistan 2018 17125. 17125.
## 4 Afganistan 2019 13114. 13114.
## 5 Afganistan 2020 5427. 5427.
## 6 Afganistan 2022 2366. 2366.
## 7 Albania 1 12.3 12.3
## 8 Albania 2 2.78 2.78
## 9 Albania 3 41.1 41.1
## 10 Albania 4 67.4 67.4
## # … with 1,859 more rows