Jurusan: Teknik Informatika

Lembaga: Universitas Islam Negeri Maulana Malik Ibrahim Malang

Manipulasi Data dengan Library dplyr

Dalam melakukan manipulasi data di R dapat menggunakan package dplyr. Package ini berfungsi untuk memudahkan manipulasi data seperti mengambil sampel secara acak dari tabel, mengurutkan data, menyaring data, atau bisa juga untuk mengelompokkan data.

Package dplyr ini digunakan ketika melakukan manipulasi data dengan pemrosesan yang cepat sehingga meminimalisir waktu, kodenya juga simpel sehingga mudah dimengerti, dan penggunaan fungsi yang sistematis sehingga kode lebih rapi. Cara menginstall package dplyr yaitu dengan :

install.package(dplyr)

Dan sintaks untuk memanggil dplyr yaitu dengan :

library(dplyr)

Data Outflow di Pulau Sumatera

library(readxl)
## Warning: package 'readxl' was built under R version 4.1.2
outflowsum <- read_excel(path ="C:/Users/Daffa/Downloads/kuliah/Semester 2/Linear Algebra/Menjelang UAS/Manipulasiinflow-outflow/OutflowSumatera.xlsx") 
outflowsum
## # A tibble: 11 x 12
##    Provinsi     `2011` `2012`  `2013`  `2014` `2015` `2016` `2017` `2018` `2019`
##    <chr>         <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
##  1 Sumatera     80092. 85235. 103288. 102338. 1.09e5 1.22e5 1.34e5 1.36e5 1.53e5
##  2 Aceh          6338.  6378.  23278.   8630. 9.64e3 1.13e4 1.18e4 1.14e4 1.31e4
##  3 Sumatera Ut~ 22176. 22495.  19235.  26391. 2.79e4 3.20e4 3.52e4 3.69e4 4.41e4
##  4 Sumatera Ba~  5300.  6434.   6511.   7060. 7.47e3 9.20e3 1.08e4 8.45e3 9.46e3
##  5 Riau         12434. 13014.  15460.  15158. 1.58e4 1.76e4 1.81e4 1.79e4 1.93e4
##  6 Kep. Riau     5819.  6966.   8747.  10122. 9.80e3 1.01e4 1.07e4 1.26e4 1.26e4
##  7 Jambi         5217.  5013.   6302.   8361. 8.32e3 7.77e3 8.43e3 8.46e3 9.20e3
##  8 Sumatera Se~ 14524. 15600.  12693.  13372. 1.35e4 1.58e4 1.70e4 1.79e4 1.91e4
##  9 Bengkulu      2561.  2959.   6490.   4583. 4.85e3 5.16e3 5.45e3 5.50e3 6.84e3
## 10 Lampung       5724.  6376.   4571.   8339. 9.95e3 1.04e4 1.34e4 1.37e4 1.56e4
## 11 Kep. Bangka~     0      0       0     322. 2.00e3 2.68e3 2.75e3 2.74e3 4.17e3
## # ... with 2 more variables: 2020 <dbl>, 2021 <dbl>
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.2
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.4     v dplyr   1.0.8
## v tidyr   1.1.3     v stringr 1.4.0
## v readr   2.0.1     v forcats 0.5.1
## Warning: package 'dplyr' was built under R version 4.1.2
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

Mambuang Beberapa Variabel yang Tidak Ingin Digunakan

sum1 <- select(outflowsum, `2020`)
sum1
## # A tibble: 11 x 1
##     `2020`
##      <dbl>
##  1 140589.
##  2  12874.
##  3  39758.
##  4   8763.
##  5  19139.
##  6   8461.
##  7   8950.
##  8  18309.
##  9   6564.
## 10  13873.
## 11   3899.
sum2 <- select(outflowsum, `2014`, `2015`, `2016`, `2017`, `2018`)
sum2
## # A tibble: 11 x 5
##     `2014`  `2015`  `2016`  `2017`  `2018`
##      <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1 102338. 109186. 121992. 133606. 135676.
##  2   8630.   9637.  11311.  11760.  11450.
##  3  26391.  27877.  31959.  35243.  36908.
##  4   7060.   7471.   9198.  10754.   8447.
##  5  15158.  15789.  17645.  18128.  17926.
##  6  10122.   9803.  10068.  10749.  12597.
##  7   8361.   8325.   7774.   8434.   8459.
##  8  13372.  13484.  15756.  16981.  17931.
##  9   4583.   4852.   5163.   5447.   5495.
## 10   8339.   9946.  10436.  13359.  13725.
## 11    322.   2005.   2684.   2750.   2738.

Memilih Beberapa Variabel yang Ingin Digunakan

Sintaks dibawah ini digunakan untuk memilih beberapa variabel yang ketika variabel yang dipilih itu lebih banyak dibandingkan variabel yang akan dibuang.

sum3 <- select(outflowsum, -`2019`)
sum3
## # A tibble: 11 x 11
##    Provinsi     `2011` `2012`  `2013`  `2014` `2015` `2016` `2017` `2018` `2020`
##    <chr>         <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
##  1 Sumatera     80092. 85235. 103288. 102338. 1.09e5 1.22e5 1.34e5 1.36e5 1.41e5
##  2 Aceh          6338.  6378.  23278.   8630. 9.64e3 1.13e4 1.18e4 1.14e4 1.29e4
##  3 Sumatera Ut~ 22176. 22495.  19235.  26391. 2.79e4 3.20e4 3.52e4 3.69e4 3.98e4
##  4 Sumatera Ba~  5300.  6434.   6511.   7060. 7.47e3 9.20e3 1.08e4 8.45e3 8.76e3
##  5 Riau         12434. 13014.  15460.  15158. 1.58e4 1.76e4 1.81e4 1.79e4 1.91e4
##  6 Kep. Riau     5819.  6966.   8747.  10122. 9.80e3 1.01e4 1.07e4 1.26e4 8.46e3
##  7 Jambi         5217.  5013.   6302.   8361. 8.32e3 7.77e3 8.43e3 8.46e3 8.95e3
##  8 Sumatera Se~ 14524. 15600.  12693.  13372. 1.35e4 1.58e4 1.70e4 1.79e4 1.83e4
##  9 Bengkulu      2561.  2959.   6490.   4583. 4.85e3 5.16e3 5.45e3 5.50e3 6.56e3
## 10 Lampung       5724.  6376.   4571.   8339. 9.95e3 1.04e4 1.34e4 1.37e4 1.39e4
## 11 Kep. Bangka~     0      0       0     322. 2.00e3 2.68e3 2.75e3 2.74e3 3.90e3
## # ... with 1 more variable: 2021 <dbl>

Sintaksnya ini menggunakan fungsi select, dan select ini bukan hanya untuk memilih kolom dalam jumlah banyak, melainkan juga bisa untuk mengganti nama kolomnya. Perhatikan sintaks yang ada dibawah ini :

sum4 <- outflowsum %>%
  select(tahun = `2014`, `2020`, `2021`)
sum4 
## # A tibble: 11 x 3
##      tahun  `2020` `2021`
##      <dbl>   <dbl>  <dbl>
##  1 102338. 140589. 86627.
##  2   8630.  12874.  5770.
##  3  26391.  39758. 23453.
##  4   7060.   8763.  5941.
##  5  15158.  19139. 12631.
##  6  10122.   8461.  5128.
##  7   8361.   8950.  6046.
##  8  13372.  18309. 11436.
##  9   4583.   6564.  4681.
## 10   8339.  13873.  8050.
## 11    322.   3899.  3493.

Mengganti Tabel Tahun

library(dplyr)
sumtahun <- outflowsum %>% rename('2010' = '2011')
head(sumtahun)
## # A tibble: 6 x 12
##   Provinsi `2010` `2012` `2013` `2014` `2015` `2016` `2017` `2018` `2019` `2020`
##   <chr>     <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
## 1 Sumatera 80092. 85235. 1.03e5 1.02e5 1.09e5 1.22e5 1.34e5 1.36e5 1.53e5 1.41e5
## 2 Aceh      6338.  6378. 2.33e4 8.63e3 9.64e3 1.13e4 1.18e4 1.14e4 1.31e4 1.29e4
## 3 Sumater~ 22176. 22495. 1.92e4 2.64e4 2.79e4 3.20e4 3.52e4 3.69e4 4.41e4 3.98e4
## 4 Sumater~  5300.  6434. 6.51e3 7.06e3 7.47e3 9.20e3 1.08e4 8.45e3 9.46e3 8.76e3
## 5 Riau     12434. 13014. 1.55e4 1.52e4 1.58e4 1.76e4 1.81e4 1.79e4 1.93e4 1.91e4
## 6 Kep. Ri~  5819.  6966. 8.75e3 1.01e4 9.80e3 1.01e4 1.07e4 1.26e4 1.26e4 8.46e3
## # ... with 1 more variable: 2021 <dbl>

Mengambil Nilai Tidak Duplikasi dari Variabel

Dari Sebuah Variabel
sum4 <- distinct(outflowsum, `2021`)
sum4
## # A tibble: 11 x 1
##    `2021`
##     <dbl>
##  1 86627.
##  2  5770.
##  3 23453.
##  4  5941.
##  5 12631.
##  6  5128.
##  7  6046.
##  8 11436.
##  9  4681.
## 10  8050.
## 11  3493.
Dari Semua Variabel
sum5 <- distinct(outflowsum, `2019`, .keep_all = TRUE)
sum5
## # A tibble: 11 x 12
##    Provinsi     `2011` `2012`  `2013`  `2014` `2015` `2016` `2017` `2018` `2019`
##    <chr>         <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
##  1 Sumatera     80092. 85235. 103288. 102338. 1.09e5 1.22e5 1.34e5 1.36e5 1.53e5
##  2 Aceh          6338.  6378.  23278.   8630. 9.64e3 1.13e4 1.18e4 1.14e4 1.31e4
##  3 Sumatera Ut~ 22176. 22495.  19235.  26391. 2.79e4 3.20e4 3.52e4 3.69e4 4.41e4
##  4 Sumatera Ba~  5300.  6434.   6511.   7060. 7.47e3 9.20e3 1.08e4 8.45e3 9.46e3
##  5 Riau         12434. 13014.  15460.  15158. 1.58e4 1.76e4 1.81e4 1.79e4 1.93e4
##  6 Kep. Riau     5819.  6966.   8747.  10122. 9.80e3 1.01e4 1.07e4 1.26e4 1.26e4
##  7 Jambi         5217.  5013.   6302.   8361. 8.32e3 7.77e3 8.43e3 8.46e3 9.20e3
##  8 Sumatera Se~ 14524. 15600.  12693.  13372. 1.35e4 1.58e4 1.70e4 1.79e4 1.91e4
##  9 Bengkulu      2561.  2959.   6490.   4583. 4.85e3 5.16e3 5.45e3 5.50e3 6.84e3
## 10 Lampung       5724.  6376.   4571.   8339. 9.95e3 1.04e4 1.34e4 1.37e4 1.56e4
## 11 Kep. Bangka~     0      0       0     322. 2.00e3 2.68e3 2.75e3 2.74e3 4.17e3
## # ... with 2 more variables: 2020 <dbl>, 2021 <dbl>

Menyeleksi Baris Tabel

Baris tabel diseleksi dengan menggunakan fungsi filter(). dalam fungsi ini terdapat berbagai operator, seperti <, <=, >, >, ==, dan %in%. Argumen dari fungsi ini juga bisa lebih dari satu, dan sintaksnya menggunakan operator boolean.

sum6 <- outflowsum %>%
  filter(Provinsi <= 'Sumatera') %>%
    select(`2017`,`2018`)
sum6
## # A tibble: 8 x 2
##    `2017`  `2018`
##     <dbl>   <dbl>
## 1 133606. 135676.
## 2  11760.  11450.
## 3  18128.  17926.
## 4  10749.  12597.
## 5   8434.   8459.
## 6   5447.   5495.
## 7  13359.  13725.
## 8   2750.   2738.
sum7 <- outflowsum %>%
  filter(Provinsi == 'Sumatera', Provinsi == 'Sumatera Selamat') %>%
    select( -`2020`)
sum7
## # A tibble: 0 x 11
## # ... with 11 variables: Provinsi <chr>, 2011 <dbl>, 2012 <dbl>, 2013 <dbl>,
## #   2014 <dbl>, 2015 <dbl>, 2016 <dbl>, 2017 <dbl>, 2018 <dbl>, 2019 <dbl>,
## #   2021 <dbl>
str(outflowsum)
## tibble [11 x 12] (S3: tbl_df/tbl/data.frame)
##  $ Provinsi: chr [1:11] "Sumatera" "Aceh" "Sumatera Utara" "Sumatera Barat" ...
##  $ 2011    : num [1:11] 80092 6338 22176 5300 12434 ...
##  $ 2012    : num [1:11] 85235 6378 22495 6434 13014 ...
##  $ 2013    : num [1:11] 103288 23278 19235 6511 15460 ...
##  $ 2014    : num [1:11] 102338 8630 26391 7060 15158 ...
##  $ 2015    : num [1:11] 109186 9637 27877 7471 15789 ...
##  $ 2016    : num [1:11] 121992 11311 31959 9198 17645 ...
##  $ 2017    : num [1:11] 133606 11760 35243 10754 18128 ...
##  $ 2018    : num [1:11] 135676 11450 36908 8447 17926 ...
##  $ 2019    : num [1:11] 153484 13087 44051 9465 19277 ...
##  $ 2020    : num [1:11] 140589 12874 39758 8763 19139 ...
##  $ 2021    : num [1:11] 86627 5770 23453 5941 12631 ...
str(outflowsum %>% group_by(Provinsi))
## grouped_df [11 x 12] (S3: grouped_df/tbl_df/tbl/data.frame)
##  $ Provinsi: chr [1:11] "Sumatera" "Aceh" "Sumatera Utara" "Sumatera Barat" ...
##  $ 2011    : num [1:11] 80092 6338 22176 5300 12434 ...
##  $ 2012    : num [1:11] 85235 6378 22495 6434 13014 ...
##  $ 2013    : num [1:11] 103288 23278 19235 6511 15460 ...
##  $ 2014    : num [1:11] 102338 8630 26391 7060 15158 ...
##  $ 2015    : num [1:11] 109186 9637 27877 7471 15789 ...
##  $ 2016    : num [1:11] 121992 11311 31959 9198 17645 ...
##  $ 2017    : num [1:11] 133606 11760 35243 10754 18128 ...
##  $ 2018    : num [1:11] 135676 11450 36908 8447 17926 ...
##  $ 2019    : num [1:11] 153484 13087 44051 9465 19277 ...
##  $ 2020    : num [1:11] 140589 12874 39758 8763 19139 ...
##  $ 2021    : num [1:11] 86627 5770 23453 5941 12631 ...
##  - attr(*, "groups")= tibble [11 x 2] (S3: tbl_df/tbl/data.frame)
##   ..$ Provinsi: chr [1:11] "Aceh" "Bengkulu" "Jambi" "Kep. Bangka Belitung" ...
##   ..$ .rows   : list<int> [1:11] 
##   .. ..$ : int 2
##   .. ..$ : int 9
##   .. ..$ : int 7
##   .. ..$ : int 11
##   .. ..$ : int 6
##   .. ..$ : int 10
##   .. ..$ : int 5
##   .. ..$ : int 1
##   .. ..$ : int 4
##   .. ..$ : int 8
##   .. ..$ : int 3
##   .. ..@ ptype: int(0) 
##   ..- attr(*, ".drop")= logi TRUE

Mengelompokkan dan Mengurutkan Data

Mengelompokkan Data
sumup <- outflowsum %>%
    group_by(Provinsi)
sumup
## # A tibble: 11 x 12
## # Groups:   Provinsi [11]
##    Provinsi     `2011` `2012`  `2013`  `2014` `2015` `2016` `2017` `2018` `2019`
##    <chr>         <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
##  1 Sumatera     80092. 85235. 103288. 102338. 1.09e5 1.22e5 1.34e5 1.36e5 1.53e5
##  2 Aceh          6338.  6378.  23278.   8630. 9.64e3 1.13e4 1.18e4 1.14e4 1.31e4
##  3 Sumatera Ut~ 22176. 22495.  19235.  26391. 2.79e4 3.20e4 3.52e4 3.69e4 4.41e4
##  4 Sumatera Ba~  5300.  6434.   6511.   7060. 7.47e3 9.20e3 1.08e4 8.45e3 9.46e3
##  5 Riau         12434. 13014.  15460.  15158. 1.58e4 1.76e4 1.81e4 1.79e4 1.93e4
##  6 Kep. Riau     5819.  6966.   8747.  10122. 9.80e3 1.01e4 1.07e4 1.26e4 1.26e4
##  7 Jambi         5217.  5013.   6302.   8361. 8.32e3 7.77e3 8.43e3 8.46e3 9.20e3
##  8 Sumatera Se~ 14524. 15600.  12693.  13372. 1.35e4 1.58e4 1.70e4 1.79e4 1.91e4
##  9 Bengkulu      2561.  2959.   6490.   4583. 4.85e3 5.16e3 5.45e3 5.50e3 6.84e3
## 10 Lampung       5724.  6376.   4571.   8339. 9.95e3 1.04e4 1.34e4 1.37e4 1.56e4
## 11 Kep. Bangka~     0      0       0     322. 2.00e3 2.68e3 2.75e3 2.74e3 4.17e3
## # ... with 2 more variables: 2020 <dbl>, 2021 <dbl>
Mengurutkan Data
sumubah <- arrange(outflowsum, `2018`)
sumubah
## # A tibble: 11 x 12
##    Provinsi     `2011` `2012`  `2013`  `2014` `2015` `2016` `2017` `2018` `2019`
##    <chr>         <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
##  1 Kep. Bangka~     0      0       0     322. 2.00e3 2.68e3 2.75e3 2.74e3 4.17e3
##  2 Bengkulu      2561.  2959.   6490.   4583. 4.85e3 5.16e3 5.45e3 5.50e3 6.84e3
##  3 Sumatera Ba~  5300.  6434.   6511.   7060. 7.47e3 9.20e3 1.08e4 8.45e3 9.46e3
##  4 Jambi         5217.  5013.   6302.   8361. 8.32e3 7.77e3 8.43e3 8.46e3 9.20e3
##  5 Aceh          6338.  6378.  23278.   8630. 9.64e3 1.13e4 1.18e4 1.14e4 1.31e4
##  6 Kep. Riau     5819.  6966.   8747.  10122. 9.80e3 1.01e4 1.07e4 1.26e4 1.26e4
##  7 Lampung       5724.  6376.   4571.   8339. 9.95e3 1.04e4 1.34e4 1.37e4 1.56e4
##  8 Riau         12434. 13014.  15460.  15158. 1.58e4 1.76e4 1.81e4 1.79e4 1.93e4
##  9 Sumatera Se~ 14524. 15600.  12693.  13372. 1.35e4 1.58e4 1.70e4 1.79e4 1.91e4
## 10 Sumatera Ut~ 22176. 22495.  19235.  26391. 2.79e4 3.20e4 3.52e4 3.69e4 4.41e4
## 11 Sumatera     80092. 85235. 103288. 102338. 1.09e5 1.22e5 1.34e5 1.36e5 1.53e5
## # ... with 2 more variables: 2020 <dbl>, 2021 <dbl>

Menambahkan Kolom pada Tabel

sumup1 <- outflowsum %>%
    mutate(`2022` = outflowsum$`2021`/2)
sumup1 
## # A tibble: 11 x 13
##    Provinsi     `2011` `2012`  `2013`  `2014` `2015` `2016` `2017` `2018` `2019`
##    <chr>         <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
##  1 Sumatera     80092. 85235. 103288. 102338. 1.09e5 1.22e5 1.34e5 1.36e5 1.53e5
##  2 Aceh          6338.  6378.  23278.   8630. 9.64e3 1.13e4 1.18e4 1.14e4 1.31e4
##  3 Sumatera Ut~ 22176. 22495.  19235.  26391. 2.79e4 3.20e4 3.52e4 3.69e4 4.41e4
##  4 Sumatera Ba~  5300.  6434.   6511.   7060. 7.47e3 9.20e3 1.08e4 8.45e3 9.46e3
##  5 Riau         12434. 13014.  15460.  15158. 1.58e4 1.76e4 1.81e4 1.79e4 1.93e4
##  6 Kep. Riau     5819.  6966.   8747.  10122. 9.80e3 1.01e4 1.07e4 1.26e4 1.26e4
##  7 Jambi         5217.  5013.   6302.   8361. 8.32e3 7.77e3 8.43e3 8.46e3 9.20e3
##  8 Sumatera Se~ 14524. 15600.  12693.  13372. 1.35e4 1.58e4 1.70e4 1.79e4 1.91e4
##  9 Bengkulu      2561.  2959.   6490.   4583. 4.85e3 5.16e3 5.45e3 5.50e3 6.84e3
## 10 Lampung       5724.  6376.   4571.   8339. 9.95e3 1.04e4 1.34e4 1.37e4 1.56e4
## 11 Kep. Bangka~     0      0       0     322. 2.00e3 2.68e3 2.75e3 2.74e3 4.17e3
## # ... with 3 more variables: 2020 <dbl>, 2021 <dbl>, 2022 <dbl>

Visualisasi Data Tabel dengan ggplot

ggplot dengan Grafik Titik

Pada Tahun 2018
ggplot(data = outflowsum, mapping = aes(x = Provinsi, y = `2018`)) +
  geom_point() 

Pada Tahun 2020
ggplot(data = outflowsum, mapping = aes(x = Provinsi, y = `2020`)) +
  geom_point() 

ggplot dengan Grafik Batang

Pada Tahun 2018
ggplot(data = outflowsum, mapping = aes(x = Provinsi, y = `2018`)) +
  geom_bar(stat = "identity")

Pada Tahun 2020
ggplot(data = outflowsum, mapping = aes(x = Provinsi, y = `2020`)) +
  geom_bar(stat = "identity")


Referensi