Tutorial dplyr: Package untuk Data wrangling dan Data Manipulation di R (45 Fungsi Beserta Contoh Kodenya)

Tutorial dplyr: tulisan ini memuat 43 metode atau fungsi dari package dplyr untuk proses data manipulation di R. Lanjut baca jika ini yang kamu butuhkan.

Data manipulation atau manipulasi data merupakan bagian penting dalam tahapan analisis data. 

Manipulasi data dapat diartikan sebagai proses mengubah data agar lebih mudah dibaca atau lebih teratur.

Terdapat banyak cara untuk melakukan manipulasi data.

Saya biasanya menggunakan package dplyr dan beberapa package lainnya seperty tidyr dan stringr.

Gunakan daftar isi di bawah ini untuk mempermudah pencarian fungsi yang dibutuhkan.

Daftar Isi Klik untuk lihat

Apa itu dplyr?

Apa itu dplyr

  • Salah satu package yang paling populer dan powerful
  • Ditulis oleh salah satu programmer R populer: Hadley Wickham (ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, and forcats~ tidyverse)
  • Dapat melakukan hampir semua operasi data manipulation
  • Mudah dipelajari, digunakan, dan diingat

Mengapa dplyr?

Mengapa menggunakan dplyr

Berikut ini beberapa alasan mengapa kita menggunakan dplyr:

  • Cepat. Pemrosesan yang lebih cepat.
  • Kode yang lebih “bersih”. “Chaining” fungsi-fungsi sehingga lebih rapi dan sistematis.
  • Kode yang lebih “simpel”. Kode lebih mudah dimengerti dan diikuti.

Operasi pipe

Operasi “pipe” merupakan alat yang ampuh untuk mengekspresikan urutan beberapa operasi dengan jelas. Pipa, %>%, berasal dari paket magrittr oleh Stefan Milton Bache.

Paket dalam tidyverse (termasuk dplyr) memuat %>% untuk kita secara otomatis, jadi kita tidak perlu memuat magrittr secara eksplisit.

Fungsi utama “pipe” adalah membantu kita menulis kode dengan cara yang lebih mudah dibaca dan dipahami.

Dengan menggunakan “pipe”, kita juga dapat “merangkai” kode agar efektif dan bersih.

Lihat gambar di bawah ini:

Petunjuk: baca %>% sebagai “lalu”.

Apa yang akan kita pelajari hari ini?

select(): memilih kolom
arrange(): mengurutkan data (baris)
filter() : memilih data (baris) sesuai kriteria
mutate(): membuat variabel atau kolom baru
summarise(): merangkum data menjadi data baru

Namun, untuk manipulasi data yang komprehensif, kita akan menggunakan fungsi dari paket dplyr bersama dengan paket lain
seperti stringr dan tidyr.

Install and load dplyr

Kita dapat menginstal dan memuat paket dplyr atau tidyverse sehingga Kita juga menginstal paket lain yang diperlukan untuk tutorial ini.

tidyverse
Package di dalam package tidyverse

tidyverse merupakan kumpulan package yang sangat populer di kalangan pengguna R, yang berisi package:
• ggplot2
• dplyr
• tidyr
• readr
• purr
• stringr
• forcats

Kode:

#instal package
install.packages("tidyverse")

# load library
library(tidyverse)

Data penguin

Dataset palmer penguins hadir sebagai pengganti langsung untuk data IRIS yang telah terlalu banyak digunakan. Dataset terdiri dari atribut tiga spesies penguin – Adélie, Gentoo, dan Chinstrap.

Load data penguin

Kode:

install.packages("palmerpenguins")

library(palmerpenguins)
data(package = 'palmerpenguins')

Data dikumpulkan dan disediakan oleh Dr. Kristen Gorman dan Palmer Station, Antartika LTER, anggota Long Term Ecological Research.

Package palmerpenguins berisi dua set data.

Pertama disebut penguins, dan merupakan versi data mentah yang disederhanakan.

Kode:

glimpse(penguins)

Output:

## Rows: 344
## Columns: 8
## $ species           <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, A...
## $ island            <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torger...
## $ bill_length_mm    <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, 42.0, 37.8, 37.8, 41.1, 38.6, 34.6, 36.6, 38.7, 42.5,...
## $ bill_depth_mm     <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, 20.2, 17.1, 17.3, 17.6, 21.2, 21.1, 17.8, 19.0, 20.7,...
## $ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186, 180, 182, 191, 198, 185, 195, 197, 184, 194, 174, 1...
## $ body_mass_g       <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, 4250, 3300, 3700, 3200, 3800, 4400, 3700, 3450, 4500,...
## $ sex               <fct> male, female, female, NA, female, male, female, male, NA, NA, NA, NA, female, male, male, female, female,...
## $ year              <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 200...

Dataset kedua adalah penguins_raw, dan berisi semua variabel dan nama asli yang diunduh.

Kode:

glimpse(penguins_raw)

Output:

## Rows: 344
## Columns: 17
## $ studyName             <chr> "PAL0708", "PAL0708", "PAL0708", "PAL0708", "PAL0708", "PAL0708", "PAL0708", "PAL0708", "PAL0708", "P...
## $ `Sample Number`       <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28...
## $ Species               <chr> "Adelie Penguin (Pygoscelis adeliae)", "Adelie Penguin (Pygoscelis adeliae)", "Adelie Penguin (Pygosc...
## $ Region                <chr> "Anvers", "Anvers", "Anvers", "Anvers", "Anvers", "Anvers", "Anvers", "Anvers", "Anvers", "Anvers", "...
## $ Island                <chr> "Torgersen", "Torgersen", "Torgersen", "Torgersen", "Torgersen", "Torgersen", "Torgersen", "Torgersen...
## $ Stage                 <chr> "Adult, 1 Egg Stage", "Adult, 1 Egg Stage", "Adult, 1 Egg Stage", "Adult, 1 Egg Stage", "Adult, 1 Egg...
## $ `Individual ID`       <chr> "N1A1", "N1A2", "N2A1", "N2A2", "N3A1", "N3A2", "N4A1", "N4A2", "N5A1", "N5A2", "N6A1", "N6A2", "N7A1...
## $ `Clutch Completion`   <chr> "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes"...
## $ `Date Egg`            <date> 2007-11-11, 2007-11-11, 2007-11-16, 2007-11-16, 2007-11-16, 2007-11-16, 2007-11-15, 2007-11-15, 2007...
## $ `Culmen Length (mm)`  <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, 42.0, 37.8, 37.8, 41.1, 38.6, 34.6, 36.6, 38.7, 4...
## $ `Culmen Depth (mm)`   <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, 20.2, 17.1, 17.3, 17.6, 21.2, 21.1, 17.8, 19.0, 2...
## $ `Flipper Length (mm)` <dbl> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186, 180, 182, 191, 198, 185, 195, 197, 184, 194, 17...
## $ `Body Mass (g)`       <dbl> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, 4250, 3300, 3700, 3200, 3800, 4400, 3700, 3450, 4...
## $ Sex                   <chr> "MALE", "FEMALE", "FEMALE", NA, "FEMALE", "MALE", "FEMALE", "MALE", NA, NA, NA, NA, "FEMALE", "MALE",...
## $ `Delta 15 N (o/oo)`   <dbl> NA, 8.94956, 8.36821, NA, 8.76651, 8.66496, 9.18718, 9.46060, NA, 9.13362, 8.63243, NA, NA, NA, 8.555...
## $ `Delta 13 C (o/oo)`   <dbl> NA, -24.69454, -25.33302, NA, -25.32426, -25.29805, -25.21799, -24.89958, NA, -25.09368, -25.21315, N...
## $ Comments              <chr> "Not enough blood for isotopes.", NA, NA, "Adult not sampled.", NA, NA, "Nest never observed with ful...

Memahami data

Dataset terdiri dari atribut tiga spesies penguin – Adélie, Gentoo, dan Chinstrap. Lihat gambar di bawah ini untuk memahami data dengan lebih baik.

Setelah memahami datanya, mari kita mulai latihannya!

Bagian 1: Memilih kolom

1. Memilih dan drop kolom berdasarkan nama

Untuk memilih atau drop satu atau beberapa kolom, cukup tambahkan namanya di pernyataan Select. Urutan yang kita tambahkan akan menentukan urutan kemunculannya di keluaran.

Memilih kolom:

Kode:

select(penguins, species, island)

Output:

## # A tibble: 344 x 2
##    species island   
##    <fct>   <fct>    
##  1 Adelie  Torgersen
##  2 Adelie  Torgersen
##  3 Adelie  Torgersen
##  4 Adelie  Torgersen
##  5 Adelie  Torgersen
##  6 Adelie  Torgersen
##  7 Adelie  Torgersen
##  8 Adelie  Torgersen
##  9 Adelie  Torgersen
## 10 Adelie  Torgersen
## # ... with 334 more rows

Jika kita ingin memilih banyak kolom,kita dapat menghemat waktu dengan menggunakan potongan atau chunk.

Pertama, kita harus melihat data dan memeriksa apakah kita dapat memilih kolom menggunakan potongan chunk.

Untuk menambahkan potongan kolom, gunakan sintaks kolom awal: kolom akhir:

Kode:

select(penguins, species, body_mass_g:year)

Output:

## # A tibble: 344 x 4
##    species body_mass_g sex     year
##    <fct>         <int> <fct>  <int>
##  1 Adelie         3750 male    2007
##  2 Adelie         3800 female  2007
##  3 Adelie         3250 female  2007
##  4 Adelie           NA <NA>    2007
##  5 Adelie         3450 female  2007
##  6 Adelie         3650 male    2007
##  7 Adelie         3625 female  2007
##  8 Adelie         4675 male    2007
##  9 Adelie         3475 <NA>    2007
## 10 Adelie         4250 <NA>    2007
## # ... with 334 more rows

Drop kolom:

Tanda minus sebelum nama kolom memberitahu R untuk membuang kolom.

Kode:

select(penguins, -island, -year)

Output:

## # A tibble: 344 x 6
##    species bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex   
##    <fct>            <dbl>         <dbl>             <int>       <int> <fct> 
##  1 Adelie            39.1          18.7               181        3750 male  
##  2 Adelie            39.5          17.4               186        3800 female
##  3 Adelie            40.3          18                 195        3250 female
##  4 Adelie            NA            NA                  NA          NA <NA>  
##  5 Adelie            36.7          19.3               193        3450 female
##  6 Adelie            39.3          20.6               190        3650 male  
##  7 Adelie            38.9          17.8               181        3625 female
##  8 Adelie            39.2          19.6               195        4675 male  
##  9 Adelie            34.1          18.1               193        3475 <NA>  
## 10 Adelie            42            20.2               190        4250 <NA>  
## # ... with 334 more rows

Kita juga dapat menggunakan kode ini:

Kode:

select(penguins, -c(sex, year))

Output:

## # A tibble: 344 x 6
##    species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
##    <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
##  1 Adelie  Torgersen           39.1          18.7               181        3750
##  2 Adelie  Torgersen           39.5          17.4               186        3800
##  3 Adelie  Torgersen           40.3          18                 195        3250
##  4 Adelie  Torgersen           NA            NA                  NA          NA
##  5 Adelie  Torgersen           36.7          19.3               193        3450
##  6 Adelie  Torgersen           39.3          20.6               190        3650
##  7 Adelie  Torgersen           38.9          17.8               181        3625
##  8 Adelie  Torgersen           39.2          19.6               195        4675
##  9 Adelie  Torgersen           34.1          18.1               193        3475
## 10 Adelie  Torgersen           42            20.2               190        4250
## # ... with 334 more rows

Dan dengan logika yang sama, kita bisa gunakan chunk,

Kode:

select(penguins,-c(sex:year))

Output:

## # A tibble: 344 x 6
##    species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
##    <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
##  1 Adelie  Torgersen           39.1          18.7               181        3750
##  2 Adelie  Torgersen           39.5          17.4               186        3800
##  3 Adelie  Torgersen           40.3          18                 195        3250
##  4 Adelie  Torgersen           NA            NA                  NA          NA
##  5 Adelie  Torgersen           36.7          19.3               193        3450
##  6 Adelie  Torgersen           39.3          20.6               190        3650
##  7 Adelie  Torgersen           38.9          17.8               181        3625
##  8 Adelie  Torgersen           39.2          19.6               195        4675
##  9 Adelie  Torgersen           34.1          18.1               193        3475
## 10 Adelie  Torgersen           42            20.2               190        4250
## # ... with 334 more rows

Operasi pipe

Sekarang, mari kita gunakan operasi pipe (%<%).

Pipe adalah alat yang ampuh untuk secara jelas mengekspresikan urutan dari beberapa operasi.
Pipe, %>%, berasal dari paket magrittr oleh Stefan Milton Bache.
• Paket dalam tidyverse (termasuk dplyr) memuat %>% untuk kita secara otomatis, jadi kita biasanya tidak memuatmagrittr secara eksplisit.
• Pintasan untuk tanda %>% adalah CTRL +SHIFT + M

Berikut contoh penggunaannya:

Kode:

penguins %>% 
  select(island, year)

Output:

## # A tibble: 344 x 2
##    island     year
##    <fct>     <int>
##  1 Torgersen  2007
##  2 Torgersen  2007
##  3 Torgersen  2007
##  4 Torgersen  2007
##  5 Torgersen  2007
##  6 Torgersen  2007
##  7 Torgersen  2007
##  8 Torgersen  2007
##  9 Torgersen  2007
## 10 Torgersen  2007
## # ... with 334 more rows

Mulai poin ini dan seterusnya, kita akan gunakan “pipe way”.

2. Memilih dan tidak memilih berdasarkan nomor kolom

Cara lain untuk memilih atau drop kolom adalah menggunakan nomor kolom. Untuk memeriksa nomor kolom, kita dapat menggunakan fungsi names.

Kode:

names(penguins)

Output:

## [1] "species"           "island"            "bill_length_mm"    "bill_depth_mm"     "flipper_length_mm" "body_mass_g"      
## [7] "sex"               "year"

Memilih kolom berdasarkan nomor kolom:

Kode:

penguins %>% 
  select(1, 2)

Output:

## # A tibble: 344 x 2
##    species island   
##    <fct>   <fct>    
##  1 Adelie  Torgersen
##  2 Adelie  Torgersen
##  3 Adelie  Torgersen
##  4 Adelie  Torgersen
##  5 Adelie  Torgersen
##  6 Adelie  Torgersen
##  7 Adelie  Torgersen
##  8 Adelie  Torgersen
##  9 Adelie  Torgersen
## 10 Adelie  Torgersen
## # ... with 334 more rows

Kode:

penguins %>% 
  select(7:8)

Output:

## # A tibble: 344 x 2
##    sex     year
##    <fct>  <int>
##  1 male    2007
##  2 female  2007
##  3 female  2007
##  4 <NA>    2007
##  5 female  2007
##  6 male    2007
##  7 female  2007
##  8 male    2007
##  9 <NA>    2007
## 10 <NA>    2007
## # ... with 334 more rows

Drop kolom berdassrkan nomor kolom:

Kode:

penguins %>% 
  select(-1, -2)

Output:

## # A tibble: 344 x 6
##    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex     year
##             <dbl>         <dbl>             <int>       <int> <fct>  <int>
##  1           39.1          18.7               181        3750 male    2007
##  2           39.5          17.4               186        3800 female  2007
##  3           40.3          18                 195        3250 female  2007
##  4           NA            NA                  NA          NA <NA>    2007
##  5           36.7          19.3               193        3450 female  2007
##  6           39.3          20.6               190        3650 male    2007
##  7           38.9          17.8               181        3625 female  2007
##  8           39.2          19.6               195        4675 male    2007
##  9           34.1          18.1               193        3475 <NA>    2007
## 10           42            20.2               190        4250 <NA>    2007
## # ... with 334 more rows

Kode:

penguins %>% 
  select(-c(7:8))

Output:

## # A tibble: 344 x 6
##    species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
##    <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
##  1 Adelie  Torgersen           39.1          18.7               181        3750
##  2 Adelie  Torgersen           39.5          17.4               186        3800
##  3 Adelie  Torgersen           40.3          18                 195        3250
##  4 Adelie  Torgersen           NA            NA                  NA          NA
##  5 Adelie  Torgersen           36.7          19.3               193        3450
##  6 Adelie  Torgersen           39.3          20.6               190        3650
##  7 Adelie  Torgersen           38.9          17.8               181        3625
##  8 Adelie  Torgersen           39.2          19.6               195        4675
##  9 Adelie  Torgersen           34.1          18.1               193        3475
## 10 Adelie  Torgersen           42            20.2               190        4250
## # ... with 334 more rows

Pilih kolom berdasarkan nama kolom parsial

Kita dapat memilih kolom berdasarkan nama kolom parsial.

BACA JUGA:  Proses download dan instalasi software eCognition Developer

Cara ini akan sangat berguna jika kita memiliki banyak kolom dengan pola nama yang serupa.

3. Pilih kolom berdasarkan nama kolom parsial: fungsi starts_with()

Sebagai contoh, kita akan memilih kolom dengan nama yang berawal dengan huruf b dan bill.

Kode:

penguins %>% 
  select(starts_with("bill"))

Output:

## # A tibble: 344 x 2
##    bill_length_mm bill_depth_mm
##             <dbl>         <dbl>
##  1           39.1          18.7
##  2           39.5          17.4
##  3           40.3          18  
##  4           NA            NA  
##  5           36.7          19.3
##  6           39.3          20.6
##  7           38.9          17.8
##  8           39.2          19.6
##  9           34.1          18.1
## 10           42            20.2
## # ... with 334 more rows

Kode:

penguins %>% 
  select(species, starts_with("bill"))

Output:

## # A tibble: 344 x 3
##    species bill_length_mm bill_depth_mm
##    <fct>            <dbl>         <dbl>
##  1 Adelie            39.1          18.7
##  2 Adelie            39.5          17.4
##  3 Adelie            40.3          18  
##  4 Adelie            NA            NA  
##  5 Adelie            36.7          19.3
##  6 Adelie            39.3          20.6
##  7 Adelie            38.9          17.8
##  8 Adelie            39.2          19.6
##  9 Adelie            34.1          18.1
## 10 Adelie            42            20.2
## # ... with 334 more rows

Kode:

penguins %>% 
  select(species,starts_with("b"))

Output:

## # A tibble: 344 x 4
##    species bill_length_mm bill_depth_mm body_mass_g
##    <fct>            <dbl>         <dbl>       <int>
##  1 Adelie            39.1          18.7        3750
##  2 Adelie            39.5          17.4        3800
##  3 Adelie            40.3          18          3250
##  4 Adelie            NA            NA            NA
##  5 Adelie            36.7          19.3        3450
##  6 Adelie            39.3          20.6        3650
##  7 Adelie            38.9          17.8        3625
##  8 Adelie            39.2          19.6        4675
##  9 Adelie            34.1          18.1        3475
## 10 Adelie            42            20.2        4250
## # ... with 334 more rows

4. Pilih kolom berdasarkan nama kolom parsial: fungsi ends_with()

Sebagai contoh, kita akan memilih kolom dengan nama yang berakhir dengan huruf mm.

Kode:

penguins %>% 
  select(ends_with("mm"))

Output:

## # A tibble: 344 x 3
##    bill_length_mm bill_depth_mm flipper_length_mm
##             <dbl>         <dbl>             <int>
##  1           39.1          18.7               181
##  2           39.5          17.4               186
##  3           40.3          18                 195
##  4           NA            NA                  NA
##  5           36.7          19.3               193
##  6           39.3          20.6               190
##  7           38.9          17.8               181
##  8           39.2          19.6               195
##  9           34.1          18.1               193
## 10           42            20.2               190
## # ... with 334 more rows

Kode:

penguins %>% 
  select(species, ends_with("mm"))

Output:

## # A tibble: 344 x 4
##    species bill_length_mm bill_depth_mm flipper_length_mm
##    <fct>            <dbl>         <dbl>             <int>
##  1 Adelie            39.1          18.7               181
##  2 Adelie            39.5          17.4               186
##  3 Adelie            40.3          18                 195
##  4 Adelie            NA            NA                  NA
##  5 Adelie            36.7          19.3               193
##  6 Adelie            39.3          20.6               190
##  7 Adelie            38.9          17.8               181
##  8 Adelie            39.2          19.6               195
##  9 Adelie            34.1          18.1               193
## 10 Adelie            42            20.2               190
## # ... with 334 more rows

5. Pilih kolom berdasarkan nama kolom parsial: fungsi contains()

Sebagai contoh, kita akan memilih kolom dengan nama yang memiliki length di dalam namanya.

Kode:

penguins %>% 
  select(contains("length"))

Output:

## # A tibble: 344 x 2
##    bill_length_mm flipper_length_mm
##             <dbl>             <int>
##  1           39.1               181
##  2           39.5               186
##  3           40.3               195
##  4           NA                  NA
##  5           36.7               193
##  6           39.3               190
##  7           38.9               181
##  8           39.2               195
##  9           34.1               193
## 10           42                 190
## # ... with 334 more rows

Kode:

penguins %>% 
  select(contains("length"), ends_with("mm"))

Output:

## # A tibble: 344 x 3
##    bill_length_mm flipper_length_mm bill_depth_mm
##             <dbl>             <int>         <dbl>
##  1           39.1               181          18.7
##  2           39.5               186          17.4
##  3           40.3               195          18  
##  4           NA                  NA          NA  
##  5           36.7               193          19.3
##  6           39.3               190          20.6
##  7           38.9               181          17.8
##  8           39.2               195          19.6
##  9           34.1               193          18.1
## 10           42                 190          20.2
## # ... with 334 more rows

6. Pilih kolom berdasarkan sebagian nama kolom: fungsi matches()

Jika data kita memiliki kolom dengan nama yang berpola tetapi tidak memiliki pola yang serupa, kita dapat menggunakan fungsi matches.
Berikut contohnya:

Kode:

penguins %>% 
  select(matches("b.+th")) # select column that starts with "b" and has "th" in its name.

Output:

## # A tibble: 344 x 2
##    bill_length_mm bill_depth_mm
##             <dbl>         <dbl>
##  1           39.1          18.7
##  2           39.5          17.4
##  3           40.3          18  
##  4           NA            NA  
##  5           36.7          19.3
##  6           39.3          20.6
##  7           38.9          17.8
##  8           39.2          19.6
##  9           34.1          18.1
## 10           42            20.2
## # ... with 334 more rows

Kode:

penguins %>% 
  select(matches("b.+th"), ends_with("mm"))

Output:

## # A tibble: 344 x 3
##    bill_length_mm bill_depth_mm flipper_length_mm
##             <dbl>         <dbl>             <int>
##  1           39.1          18.7               181
##  2           39.5          17.4               186
##  3           40.3          18                 195
##  4           NA            NA                  NA
##  5           36.7          19.3               193
##  6           39.3          20.6               190
##  7           38.9          17.8               181
##  8           39.2          19.6               195
##  9           34.1          18.1               193
## 10           42            20.2               190
## # ... with 334 more rows

Kode:

penguins %>% 
  select(matches("b.+th.+mm"))

Output:

## # A tibble: 344 x 2
##    bill_length_mm bill_depth_mm
##             <dbl>         <dbl>
##  1           39.1          18.7
##  2           39.5          17.4
##  3           40.3          18  
##  4           NA            NA  
##  5           36.7          19.3
##  6           39.3          20.6
##  7           38.9          17.8
##  8           39.2          19.6
##  9           34.1          18.1
## 10           42            20.2
## # ... with 334 more rows

7. Pilih kolom berdasarkan nama kolom yang telah diidentifikasi sebelumnya

Ada cara lain untuk mengurangi waktu mengetik ulang nama kolom.

Caranya, kita menyiapkan nama kolom, lalu merujuknya ke dalam fungsi select.

Pertama, kita siapkan nama-nama kolom yang akan kita pilih.

Kode:

measurement <- c("bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g")

Selanjutnya, kita gunakan fungsi select untuk memilih kolom-kolom yang sudah kita siapkan.

Kode:

penguins %>% 
  select(species,measurement)

Output:

## # A tibble: 344 x 5
##    species bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
##    <fct>            <dbl>         <dbl>             <int>       <int>
##  1 Adelie            39.1          18.7               181        3750
##  2 Adelie            39.5          17.4               186        3800
##  3 Adelie            40.3          18                 195        3250
##  4 Adelie            NA            NA                  NA          NA
##  5 Adelie            36.7          19.3               193        3450
##  6 Adelie            39.3          20.6               190        3650
##  7 Adelie            38.9          17.8               181        3625
##  8 Adelie            39.2          19.6               195        4675
##  9 Adelie            34.1          18.1               193        3475
## 10 Adelie            42            20.2               190        4250
## # ... with 334 more rows

8. Pilih kolom menurut tipe datanya: fungsi select_if

Fungsi Select_if memungkinkan kita untuk memilih kolom berdasarkan fungsi logika.

Kita dapat memilih kolom berdasarkan tipe datanya menggunakan fungsi select_if diikuti denganis.character, is.numeric,is.logical atau tipe data lain yang kita inginkan.

Kode:

penguins %>% 
  select_if(is.numeric)

Output:

## # A tibble: 344 x 5
##    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g  year
##             <dbl>         <dbl>             <int>       <int> <int>
##  1           39.1          18.7               181        3750  2007
##  2           39.5          17.4               186        3800  2007
##  3           40.3          18                 195        3250  2007
##  4           NA            NA                  NA          NA  2007
##  5           36.7          19.3               193        3450  2007
##  6           39.3          20.6               190        3650  2007
##  7           38.9          17.8               181        3625  2007
##  8           39.2          19.6               195        4675  2007
##  9           34.1          18.1               193        3475  2007
## 10           42            20.2               190        4250  2007
## # ... with 334 more rows

Kode:

penguins %>% 
  select_if(is.factor)

Output:

## # A tibble: 344 x 3
##    species island    sex   
##    <fct>   <fct>     <fct> 
##  1 Adelie  Torgersen male  
##  2 Adelie  Torgersen female
##  3 Adelie  Torgersen female
##  4 Adelie  Torgersen <NA>  
##  5 Adelie  Torgersen female
##  6 Adelie  Torgersen male  
##  7 Adelie  Torgersen female
##  8 Adelie  Torgersen male  
##  9 Adelie  Torgersen <NA>  
## 10 Adelie  Torgersen <NA>  
## # ... with 334 more rows

Bagian 2: Menyusun ulang kolom

9. Menggunakan fungsi select()

Kita dapat mengatur ulang kolom menggunakan fungsi select.

Urutan kolom yang kita tambahkan akan menentukan urutan kemunculannya di keluaran.

Misal kita ingin memilih nama kolom dengan urutan: species, island, year, sex.

Kode:

penguins %>% 
  select(species, island, year, sex)

Output:

## # A tibble: 344 x 4
##    species island     year sex   
##    <fct>   <fct>     <int> <fct> 
##  1 Adelie  Torgersen  2007 male  
##  2 Adelie  Torgersen  2007 female
##  3 Adelie  Torgersen  2007 female
##  4 Adelie  Torgersen  2007 <NA>  
##  5 Adelie  Torgersen  2007 female
##  6 Adelie  Torgersen  2007 male  
##  7 Adelie  Torgersen  2007 female
##  8 Adelie  Torgersen  2007 male  
##  9 Adelie  Torgersen  2007 <NA>  
## 10 Adelie  Torgersen  2007 <NA>  
## # ... with 334 more rows

Dengan cara yang sama, kita dapat mengganti urutannya.

Kode:

penguins %>% 
  select(species, sex, island, year)

Output:

## # A tibble: 344 x 4
##    species sex    island     year
##    <fct>   <fct>  <fct>     <int>
##  1 Adelie  male   Torgersen  2007
##  2 Adelie  female Torgersen  2007
##  3 Adelie  female Torgersen  2007
##  4 Adelie  <NA>   Torgersen  2007
##  5 Adelie  female Torgersen  2007
##  6 Adelie  male   Torgersen  2007
##  7 Adelie  female Torgersen  2007
##  8 Adelie  male   Torgersen  2007
##  9 Adelie  <NA>   Torgersen  2007
## 10 Adelie  <NA>   Torgersen  2007
## # ... with 334 more rows

10. Fungsi everything

Namun, jika kita hanya ingin memindahkan beberapa kolom ke depan (kiri), kita dapat menambahkan fungsi everything () di belakang nama kolom yang ingin kita pindah ke depan lokasinya.

Misal, kita iningn memindah kolom species, year, sex, dan membiarkan kolom lainnya pada urutan yang sebelumnya, kita gunakan kode di bawah ini:

Kode:

penguins %>% 
  select(species, year, sex, everything())

Output:

## # A tibble: 344 x 8
##    species  year sex    island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
##    <fct>   <int> <fct>  <fct>              <dbl>         <dbl>             <int>       <int>
##  1 Adelie   2007 male   Torgersen           39.1          18.7               181        3750
##  2 Adelie   2007 female Torgersen           39.5          17.4               186        3800
##  3 Adelie   2007 female Torgersen           40.3          18                 195        3250
##  4 Adelie   2007 <NA>   Torgersen           NA            NA                  NA          NA
##  5 Adelie   2007 female Torgersen           36.7          19.3               193        3450
##  6 Adelie   2007 male   Torgersen           39.3          20.6               190        3650
##  7 Adelie   2007 female Torgersen           38.9          17.8               181        3625
##  8 Adelie   2007 male   Torgersen           39.2          19.6               195        4675
##  9 Adelie   2007 <NA>   Torgersen           34.1          18.1               193        3475
## 10 Adelie   2007 <NA>   Torgersen           42            20.2               190        4250
## # ... with 334 more rows

Bagian 3: Ubah nama dan format ulang kolom

11. Ganti nama kolom: fungsi select()

Kita dapat mengganti nama kolom langsung di fungsi pilih.Caranya dengan menggunakan format nama baru = nama lama.

Misal kita ingin memilih kolom year dengan nama baru time dan kolom island dengan nama baru area.

Kode:

penguins %>% 
  select(time = year, area= island)

Output:

## # A tibble: 344 x 2
##     time area     
##    <int> <fct>    
##  1  2007 Torgersen
##  2  2007 Torgersen
##  3  2007 Torgersen
##  4  2007 Torgersen
##  5  2007 Torgersen
##  6  2007 Torgersen
##  7  2007 Torgersen
##  8  2007 Torgersen
##  9  2007 Torgersen
## 10  2007 Torgersen
## # ... with 334 more rows

12. Ganti nama kolom: fungsi rename()

Jika kita ingin tetap mempertahakankan semua kolom, kita dapat mengganti nama kolom menggunakan pernyataan rename ().

Perhatikan perbedaan hasilnya dengan kode pada langkah sebelumnya.

Kode:

penguins %>% 
  rename(time = year, area= island)

Output:

## # A tibble: 344 x 8
##    species area      bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex     time
##    <fct>   <fct>              <dbl>         <dbl>             <int>       <int> <fct>  <int>
##  1 Adelie  Torgersen           39.1          18.7               181        3750 male    2007
##  2 Adelie  Torgersen           39.5          17.4               186        3800 female  2007
##  3 Adelie  Torgersen           40.3          18                 195        3250 female  2007
##  4 Adelie  Torgersen           NA            NA                  NA          NA <NA>    2007
##  5 Adelie  Torgersen           36.7          19.3               193        3450 female  2007
##  6 Adelie  Torgersen           39.3          20.6               190        3650 male    2007
##  7 Adelie  Torgersen           38.9          17.8               181        3625 female  2007
##  8 Adelie  Torgersen           39.2          19.6               195        4675 male    2007
##  9 Adelie  Torgersen           34.1          18.1               193        3475 <NA>    2007
## 10 Adelie  Torgersen           42            20.2               190        4250 <NA>    2007
## # ... with 334 more rows

Format ulang semua kolom

14. Format menjadi huruf besar: toupper()

Untuk format nama semua kolom, pertama kita menggunakan fungsi select_all () untuk memungkinkan perubahan pada semua kolom, lalu gunakan toupper () untuk mengubah semua nama kolom menjadi huruf besar.

Kode:

penguins %>% 
  select_all(toupper)

Output:

## # A tibble: 344 x 8
##    SPECIES ISLAND    BILL_LENGTH_MM BILL_DEPTH_MM FLIPPER_LENGTH_MM BODY_MASS_G SEX     YEAR
##    <fct>   <fct>              <dbl>         <dbl>             <int>       <int> <fct>  <int>
##  1 Adelie  Torgersen           39.1          18.7               181        3750 male    2007
##  2 Adelie  Torgersen           39.5          17.4               186        3800 female  2007
##  3 Adelie  Torgersen           40.3          18                 195        3250 female  2007
##  4 Adelie  Torgersen           NA            NA                  NA          NA <NA>    2007
##  5 Adelie  Torgersen           36.7          19.3               193        3450 female  2007
##  6 Adelie  Torgersen           39.3          20.6               190        3650 male    2007
##  7 Adelie  Torgersen           38.9          17.8               181        3625 female  2007
##  8 Adelie  Torgersen           39.2          19.6               195        4675 male    2007
##  9 Adelie  Torgersen           34.1          18.1               193        3475 <NA>    2007
## 10 Adelie  Torgersen           42            20.2               190        4250 <NA>    2007
## # ... with 334 more rows

15. Format menjadi huruf kecil: tolower()

Dengan cara yang sama, kita bisa format semua nama ke lowercase dengan fungsi tolower.

Kode:

penguins %>% 
  select_all(tolower)

Output:

## # A tibble: 344 x 8
##    species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex     year
##    <fct>   <fct>              <dbl>         <dbl>             <int>       <int> <fct>  <int>
##  1 Adelie  Torgersen           39.1          18.7               181        3750 male    2007
##  2 Adelie  Torgersen           39.5          17.4               186        3800 female  2007
##  3 Adelie  Torgersen           40.3          18                 195        3250 female  2007
##  4 Adelie  Torgersen           NA            NA                  NA          NA <NA>    2007
##  5 Adelie  Torgersen           36.7          19.3               193        3450 female  2007
##  6 Adelie  Torgersen           39.3          20.6               190        3650 male    2007
##  7 Adelie  Torgersen           38.9          17.8               181        3625 female  2007
##  8 Adelie  Torgersen           39.2          19.6               195        4675 male    2007
##  9 Adelie  Torgersen           34.1          18.1               193        3475 <NA>    2007
## 10 Adelie  Torgersen           42            20.2               190        4250 <NA>    2007
## # ... with 334 more rows

Bagian 4: Melakukan filter data

16. Pilih Random N Rows: fungsi sample_n ()

Fungsi sample_n () akan memilih baris acak dari dataset (atau tabel).

Parameter kedua memberi tahu R jumlah baris yang harus dipilih.

Misal, kita ingin memilih 5 baris data kita secara random. Gunakan kode ini:

Kode:

penguins %>% 
  sample_n(5)
## # A tibble: 5 x 8
##   species   island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex     year
##   <fct>     <fct>              <dbl>         <dbl>             <int>       <int> <fct>  <int>
## 1 Chinstrap Dream               47.5          16.8               199        3900 female  2008
## 2 Chinstrap Dream               51.3          18.2               197        3750 male    2007
## 3 Chinstrap Dream               42.5          16.7               187        3350 female  2008
## 4 Gentoo    Biscoe              43.5          14.2               220        4700 female  2008
## 5 Adelie    Torgersen           38.6          17                 188        2900 female  2009

17. Memilih acak berdasarkan proporsi: fungsi sample_frac()

Fungsi sample_frac() memilih N% baris acak dari dataset (atau tabel). Parameter kedua memberi tahu R pecahan (0-1) baris yang akan dipilih.

Misal kita ingin memilih 0,01 atau 1% dari data kita, kita bisa gunakan kode ini:

Kode:

penguins %>% 
  sample_frac(0.01)

Output:

## # A tibble: 3 x 8
##   species   island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex     year
##   <fct>     <fct>              <dbl>         <dbl>             <int>       <int> <fct>  <int>
## 1 Chinstrap Dream               46.4          18.6               190        3450 female  2007
## 2 Gentoo    Biscoe              46.5          14.8               217        5200 female  2008
## 3 Adelie    Torgersen           41.4          18.5               202        3875 male    2009

Chaining code

BACA JUGA:  Belajar R Langsung dari Ahlinya: Kopdar useR Indonesia, Bogor

Kita dapat menggunakan beberapa fungsi sekaligus dalam satu set kode.

Kita dapat melanjutkan perintah dengan perintah lain dengan menambahkan operator pipa %>% di akhir kode sebelumnya.

Misalnya, kita dapat memilih beberapa kolom dan kemudian mengubah semua nama kolom menjadi format huruf besar.

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  select_all(toupper)

Output:

## # A tibble: 344 x 4
##    SPECIES ISLAND     YEAR SEX   
##    <fct>   <fct>     <int> <fct> 
##  1 Adelie  Torgersen  2007 male  
##  2 Adelie  Torgersen  2007 female
##  3 Adelie  Torgersen  2007 female
##  4 Adelie  Torgersen  2007 <NA>  
##  5 Adelie  Torgersen  2007 female
##  6 Adelie  Torgersen  2007 male  
##  7 Adelie  Torgersen  2007 female
##  8 Adelie  Torgersen  2007 male  
##  9 Adelie  Torgersen  2007 <NA>  
## 10 Adelie  Torgersen  2007 <NA>  
## # ... with 334 more rows

Your turn:

Ambil sampel sepuluh persen dari data, tampilkan hanya kolom spesies,pulau, dan tahun!

17. Filter baris berdasarkan variabel numerik

Operator yang paling sering digunakan untuk ini adalah >, > =, <, <=, == dan ! =.

Berikut beberapa contohnya.

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  filter(year < 2008)

Output:

## # A tibble: 110 x 4
##    species island     year sex   
##    <fct>   <fct>     <int> <fct> 
##  1 Adelie  Torgersen  2007 male  
##  2 Adelie  Torgersen  2007 female
##  3 Adelie  Torgersen  2007 female
##  4 Adelie  Torgersen  2007 <NA>  
##  5 Adelie  Torgersen  2007 female
##  6 Adelie  Torgersen  2007 male  
##  7 Adelie  Torgersen  2007 female
##  8 Adelie  Torgersen  2007 male  
##  9 Adelie  Torgersen  2007 <NA>  
## 10 Adelie  Torgersen  2007 <NA>  
## # ... with 100 more rows

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(bill_length_mm > 35, bill_length_mm < 38)

Output:

## # A tibble: 51 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 female           36.7
##  2 Adelie  Torgersen  2007 <NA>             37.8
##  3 Adelie  Torgersen  2007 <NA>             37.8
##  4 Adelie  Torgersen  2007 female           36.6
##  5 Adelie  Biscoe     2007 female           37.8
##  6 Adelie  Biscoe     2007 male             37.7
##  7 Adelie  Biscoe     2007 female           35.9
##  8 Adelie  Biscoe     2007 female           35.3
##  9 Adelie  Biscoe     2007 female           37.9
## 10 Adelie  Dream      2007 male             37.2
## # ... with 41 more rows

18. Filter baris berdasarkan variabel numerik: fungsi between()

Kita dapat menggunakan between() untuk memilih rentang nilai. Ini adalah cara yang lebih singkat untuk mengekspresikan > = .. & .. <=.

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(bill_length_mm >= 35, bill_length_mm <= 38)

Output:

## # A tibble: 53 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 female           36.7
##  2 Adelie  Torgersen  2007 <NA>             37.8
##  3 Adelie  Torgersen  2007 <NA>             37.8
##  4 Adelie  Torgersen  2007 female           36.6
##  5 Adelie  Biscoe     2007 female           37.8
##  6 Adelie  Biscoe     2007 male             37.7
##  7 Adelie  Biscoe     2007 female           35.9
##  8 Adelie  Biscoe     2007 female           35.3
##  9 Adelie  Biscoe     2007 female           37.9
## 10 Adelie  Dream      2007 male             37.2
## # ... with 43 more rows

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(between(bill_length_mm,35,38))

Output:

## # A tibble: 53 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 female           36.7
##  2 Adelie  Torgersen  2007 <NA>             37.8
##  3 Adelie  Torgersen  2007 <NA>             37.8
##  4 Adelie  Torgersen  2007 female           36.6
##  5 Adelie  Biscoe     2007 female           37.8
##  6 Adelie  Biscoe     2007 male             37.7
##  7 Adelie  Biscoe     2007 female           35.9
##  8 Adelie  Biscoe     2007 female           35.3
##  9 Adelie  Biscoe     2007 female           37.9
## 10 Adelie  Dream      2007 male             37.2
## # ... with 43 more rows

19. Filter baris berdasarkan variabel numerik: fungsi near()

Fungsi lain yang dapat digunakan adalah near(), yang akan memilih semua nilai yang mendekati nilai yang diberikan.

Untuk menunjukkan seberapa jauh nilainya, kami menetapkan toleransi menggunakan pernyataan tol.

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(near(bill_length_mm,35,tol = 0.5))

Output:

## # A tibble: 7 x 5
##   species island     year sex    bill_length_mm
##   <fct>   <fct>     <int> <fct>           <dbl>
## 1 Adelie  Torgersen  2007 male             34.6
## 2 Adelie  Biscoe     2007 female           35.3
## 3 Adelie  Biscoe     2008 female           35  
## 4 Adelie  Torgersen  2008 female           34.6
## 5 Adelie  Torgersen  2008 male             35.1
## 6 Adelie  Biscoe     2009 female           35  
## 7 Adelie  Torgersen  2009 female           35.2

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(near(bill_length_mm,35,tol = sd(na.omit(bill_length_mm))))

Output:

## # A tibble: 106 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 female           36.7
##  5 Adelie  Torgersen  2007 male             39.3
##  6 Adelie  Torgersen  2007 female           38.9
##  7 Adelie  Torgersen  2007 male             39.2
##  8 Adelie  Torgersen  2007 <NA>             34.1
##  9 Adelie  Torgersen  2007 <NA>             37.8
## 10 Adelie  Torgersen  2007 <NA>             37.8
## # ... with 96 more rows

20. Filter baris berdasarkan data dengan penulisan yang sama persis

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(species == "Chinstrap")

Output:

## # A tibble: 68 x 5
##    species   island  year sex    bill_length_mm
##    <fct>     <fct>  <int> <fct>           <dbl>
##  1 Chinstrap Dream   2007 female           46.5
##  2 Chinstrap Dream   2007 male             50  
##  3 Chinstrap Dream   2007 male             51.3
##  4 Chinstrap Dream   2007 female           45.4
##  5 Chinstrap Dream   2007 male             52.7
##  6 Chinstrap Dream   2007 female           45.2
##  7 Chinstrap Dream   2007 female           46.1
##  8 Chinstrap Dream   2007 male             51.3
##  9 Chinstrap Dream   2007 female           46  
## 10 Chinstrap Dream   2007 male             51.3
## # ... with 58 more rows

Untuk mengeluarkan data tertentu, kita dapat menggunakan operator!=.

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(species != "Chinstrap")

Output:

## # A tibble: 276 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 <NA>             NA  
##  5 Adelie  Torgersen  2007 female           36.7
##  6 Adelie  Torgersen  2007 male             39.3
##  7 Adelie  Torgersen  2007 female           38.9
##  8 Adelie  Torgersen  2007 male             39.2
##  9 Adelie  Torgersen  2007 <NA>             34.1
## 10 Adelie  Torgersen  2007 <NA>             42  
## # ... with 266 more rows

Sedangkan untuk memilih lebih dari satu record, kita dapat menggunakan | atau %in%.

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(species == "Chinstrap" | species == "Adelie")

Output:

## # A tibble: 220 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 <NA>             NA  
##  5 Adelie  Torgersen  2007 female           36.7
##  6 Adelie  Torgersen  2007 male             39.3
##  7 Adelie  Torgersen  2007 female           38.9
##  8 Adelie  Torgersen  2007 male             39.2
##  9 Adelie  Torgersen  2007 <NA>             34.1
## 10 Adelie  Torgersen  2007 <NA>             42  
## # ... with 210 more rows

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(species %in% c("Chinstrap", "Adelie"))

Output:

## # A tibble: 220 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 <NA>             NA  
##  5 Adelie  Torgersen  2007 female           36.7
##  6 Adelie  Torgersen  2007 male             39.3
##  7 Adelie  Torgersen  2007 female           38.9
##  8 Adelie  Torgersen  2007 male             39.2
##  9 Adelie  Torgersen  2007 <NA>             34.1
## 10 Adelie  Torgersen  2007 <NA>             42  
## # ... with 210 more rows

21. Filter baris berdasarkan nama kolom parsial yang memiliki pola serupa

Kita bisa menggunakan str_detect () dari paket stringr (bagian daritidyverse) untuk mencari kecocokan parsial.

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(str_detect(island, pattern = "gersen"))

Output:

## # A tibble: 52 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 <NA>             NA  
##  5 Adelie  Torgersen  2007 female           36.7
##  6 Adelie  Torgersen  2007 male             39.3
##  7 Adelie  Torgersen  2007 female           38.9
##  8 Adelie  Torgersen  2007 male             39.2
##  9 Adelie  Torgersen  2007 <NA>             34.1
## 10 Adelie  Torgersen  2007 <NA>             42  
## # ... with 42 more rows

Filter baris berdasarkan beberapa kondisi

Opsi filter juga mengizinkan filter DAN dan ATAU:

  • filter (condition1, condition2) akan mengembalikan baris tempat kedua ketentuan terpenuhi.
  • filter (condition1,! condition2) akan mengembalikan semua baris di mana kondisi satu benar tetapi kondisi 2 tidak.
  • filter (condition1 | condition2) akan mengembalikan baris di mana kondisi 1 dan / atau kondisi 2 terpenuhi.
  • filter (xor (condition1, condition2) akan mengembalikan semua baris yang hanya satu ketentuan yang terpenuhi, dan tidak jika kedua ketentuan terpenuhi.

22. Memfilter baris dengan kedua kondisi terpenuhi

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(str_detect(island, pattern = "gersen"), species== "Adelie")

Output:

## # A tibble: 52 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 <NA>             NA  
##  5 Adelie  Torgersen  2007 female           36.7
##  6 Adelie  Torgersen  2007 male             39.3
##  7 Adelie  Torgersen  2007 female           38.9
##  8 Adelie  Torgersen  2007 male             39.2
##  9 Adelie  Torgersen  2007 <NA>             34.1
## 10 Adelie  Torgersen  2007 <NA>             42  
## # ... with 42 more rows

23.Memfilter baris dengan kondisi pertama terpenuhi dan kondisi kedua tidak terpenuhi

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(str_detect(island, pattern = "gersen"), !species== "Chinstrap")

Output:

## # A tibble: 52 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 <NA>             NA  
##  5 Adelie  Torgersen  2007 female           36.7
##  6 Adelie  Torgersen  2007 male             39.3
##  7 Adelie  Torgersen  2007 female           38.9
##  8 Adelie  Torgersen  2007 male             39.2
##  9 Adelie  Torgersen  2007 <NA>             34.1
## 10 Adelie  Torgersen  2007 <NA>             42  
## # ... with 42 more rows

24. Memfilter baris dengan kondisi pertama dan-atau kondisi kedua terpenuhi

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(str_detect(island, pattern = "gersen") | species== "Chinstrap")

Output:

## # A tibble: 120 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 <NA>             NA  
##  5 Adelie  Torgersen  2007 female           36.7
##  6 Adelie  Torgersen  2007 male             39.3
##  7 Adelie  Torgersen  2007 female           38.9
##  8 Adelie  Torgersen  2007 male             39.2
##  9 Adelie  Torgersen  2007 <NA>             34.1
## 10 Adelie  Torgersen  2007 <NA>             42  
## # ... with 110 more rows

25. Menggunakan fungsi xor

Kode:

penguins %>% 
  select(species, island, year, sex, bill_length_mm) %>% 
  filter(xor(str_detect(island, pattern = "gersen"), species== "Chinstrap"))

Output:

## # A tibble: 120 x 5
##    species island     year sex    bill_length_mm
##    <fct>   <fct>     <int> <fct>           <dbl>
##  1 Adelie  Torgersen  2007 male             39.1
##  2 Adelie  Torgersen  2007 female           39.5
##  3 Adelie  Torgersen  2007 female           40.3
##  4 Adelie  Torgersen  2007 <NA>             NA  
##  5 Adelie  Torgersen  2007 female           36.7
##  6 Adelie  Torgersen  2007 male             39.3
##  7 Adelie  Torgersen  2007 female           38.9
##  8 Adelie  Torgersen  2007 male             39.2
##  9 Adelie  Torgersen  2007 <NA>             34.1
## 10 Adelie  Torgersen  2007 <NA>             42  
## # ... with 110 more rows

26. Memilih atau tidak memilih baris kosong

Untuk menyaring baris kosong, kita dapat menggunakan fungsi is.na () di dalam fungsi filter ().

Kode:

penguins %>% 
  select(species, island, year, sex)

Output:

## # A tibble: 344 x 4
##    species island     year sex   
##    <fct>   <fct>     <int> <fct> 
##  1 Adelie  Torgersen  2007 male  
##  2 Adelie  Torgersen  2007 female
##  3 Adelie  Torgersen  2007 female
##  4 Adelie  Torgersen  2007 <NA>  
##  5 Adelie  Torgersen  2007 female
##  6 Adelie  Torgersen  2007 male  
##  7 Adelie  Torgersen  2007 female
##  8 Adelie  Torgersen  2007 male  
##  9 Adelie  Torgersen  2007 <NA>  
## 10 Adelie  Torgersen  2007 <NA>  
## # ... with 334 more rows

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  filter(is.na(sex))

Output:

## # A tibble: 11 x 4
##    species island     year sex  
##    <fct>   <fct>     <int> <fct>
##  1 Adelie  Torgersen  2007 <NA> 
##  2 Adelie  Torgersen  2007 <NA> 
##  3 Adelie  Torgersen  2007 <NA> 
##  4 Adelie  Torgersen  2007 <NA> 
##  5 Adelie  Torgersen  2007 <NA> 
##  6 Adelie  Dream      2007 <NA> 
##  7 Gentoo  Biscoe     2007 <NA> 
##  8 Gentoo  Biscoe     2008 <NA> 
##  9 Gentoo  Biscoe     2009 <NA> 
## 10 Gentoo  Biscoe     2009 <NA> 
## 11 Gentoo  Biscoe     2009 <NA>

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  filter(!is.na(sex))

Output:

## # A tibble: 333 x 4
##    species island     year sex   
##    <fct>   <fct>     <int> <fct> 
##  1 Adelie  Torgersen  2007 male  
##  2 Adelie  Torgersen  2007 female
##  3 Adelie  Torgersen  2007 female
##  4 Adelie  Torgersen  2007 female
##  5 Adelie  Torgersen  2007 male  
##  6 Adelie  Torgersen  2007 female
##  7 Adelie  Torgersen  2007 male  
##  8 Adelie  Torgersen  2007 female
##  9 Adelie  Torgersen  2007 male  
## 10 Adelie  Torgersen  2007 male  
## # ... with 323 more rows

Filter di beberapa kolom

27. Filter_all

Kita bisa menggunakan fungsi filter_all () untuk memilih baris yang mengandung kata (atau karakter) tertentu dalam beberapa kolom.

Dalam kode contoh di bawah ini, kita mencari string “ae” di semua kolom.

Kita ingin menyimpan baris di mana string “ae” ada di SETIAP variabel, jadi kita akan menggunakan kondisi di any_vars ().

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  filter_all(any_vars(str_detect(., pattern = "sen")))

Output:

## # A tibble: 52 x 4
##    species island     year sex   
##    <fct>   <fct>     <int> <fct> 
##  1 Adelie  Torgersen  2007 male  
##  2 Adelie  Torgersen  2007 female
##  3 Adelie  Torgersen  2007 female
##  4 Adelie  Torgersen  2007 <NA>  
##  5 Adelie  Torgersen  2007 female
##  6 Adelie  Torgersen  2007 male  
##  7 Adelie  Torgersen  2007 female
##  8 Adelie  Torgersen  2007 male  
##  9 Adelie  Torgersen  2007 <NA>  
## 10 Adelie  Torgersen  2007 <NA>  
## # ... with 42 more rows

Fungsi any_vars () bekerja dengan logika OR, yang akan mengembalikan semua baris yang berisi kata (atau karakter) tertentu di semua kolom yang tersedia.

Jika kita ingin memilih baris yang berisi karakter tertentu di setiap kolom (logika AND) kita bisa menggunakan fungsi all_vars ().

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  filter_all(all_vars(str_detect(., pattern = "sen")))

Output:

## # A tibble: 0 x 4
## # ... with 4 variables: species <fct>, island <fct>, year <int>, sex <fct>

28. Filter_at

filter_at () tidak memfilter semua kolom, kita hanya dapat memilih kolom di mana perubahan harus dilakukan melalui argumen vars ().

Kode:

# filter string with pattern "sen" in 'island' column
penguins %>% 
  select(species, island, year, sex) %>% 
  filter_at(vars(island), any_vars(str_detect(., pattern = "sen")))

Output:

## # A tibble: 52 x 4
##    species island     year sex   
##    <fct>   <fct>     <int> <fct> 
##  1 Adelie  Torgersen  2007 male  
##  2 Adelie  Torgersen  2007 female
##  3 Adelie  Torgersen  2007 female
##  4 Adelie  Torgersen  2007 <NA>  
##  5 Adelie  Torgersen  2007 female
##  6 Adelie  Torgersen  2007 male  
##  7 Adelie  Torgersen  2007 female
##  8 Adelie  Torgersen  2007 male  
##  9 Adelie  Torgersen  2007 <NA>  
## 10 Adelie  Torgersen  2007 <NA>  
## # ... with 42 more rows

Part 5: Mengurutkan data

29. Mengurutkan data dengan fungsi arrange()

Caranya, gunakan fungsi arrange dan tuliskan kolom dasar pengurutan data, misal kolom sex.

Kode:

BACA JUGA:  Download dan Reproyeksi Citra MODIS Secara Cepat dengan Package MODIStsp di R
penguins %>% 
  select(species, island, year, sex) %>% 
  arrange(sex)

Output:

## # A tibble: 344 x 4
##    species island     year sex   
##    <fct>   <fct>     <int> <fct> 
##  1 Adelie  Torgersen  2007 female
##  2 Adelie  Torgersen  2007 female
##  3 Adelie  Torgersen  2007 female
##  4 Adelie  Torgersen  2007 female
##  5 Adelie  Torgersen  2007 female
##  6 Adelie  Torgersen  2007 female
##  7 Adelie  Torgersen  2007 female
##  8 Adelie  Torgersen  2007 female
##  9 Adelie  Biscoe     2007 female
## 10 Adelie  Biscoe     2007 female
## # ... with 334 more rows

30. Urutan descending

Untuk melakukan urutan terbalik (dari besar ke kecil), tambahkan desc pada fungsi arrange.

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  arrange(desc(sex))

Output:

## # A tibble: 344 x 4
##    species island     year sex  
##    <fct>   <fct>     <int> <fct>
##  1 Adelie  Torgersen  2007 male 
##  2 Adelie  Torgersen  2007 male 
##  3 Adelie  Torgersen  2007 male 
##  4 Adelie  Torgersen  2007 male 
##  5 Adelie  Torgersen  2007 male 
##  6 Adelie  Torgersen  2007 male 
##  7 Adelie  Torgersen  2007 male 
##  8 Adelie  Biscoe     2007 male 
##  9 Adelie  Biscoe     2007 male 
## 10 Adelie  Biscoe     2007 male 
## # ... with 334 more rows

31. Mengurutkan data berdasarkan beberapa kolom

Caranya sama persis, hanya tambahkan nama kolom dalam fungsi arrange.

Misal kita hendak mengurutkan data berdasarkan kolom sex lalu mengurutkan kembali berdasarkan kolom island.

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  arrange(sex, island)

Output:

## # A tibble: 344 x 4
##    species island  year sex   
##    <fct>   <fct>  <int> <fct> 
##  1 Adelie  Biscoe  2007 female
##  2 Adelie  Biscoe  2007 female
##  3 Adelie  Biscoe  2007 female
##  4 Adelie  Biscoe  2007 female
##  5 Adelie  Biscoe  2007 female
##  6 Adelie  Biscoe  2008 female
##  7 Adelie  Biscoe  2008 female
##  8 Adelie  Biscoe  2008 female
##  9 Adelie  Biscoe  2008 female
## 10 Adelie  Biscoe  2008 female
## # ... with 334 more rows

Part 6: Membuat variabel atau kolom baru

Membuat kolom

Untuk membuat variabel baru (atau kolom) kita menggunakan fungsi mutate ().

Apa pun di dalam mutate () bisa berupa kolom baru (dengan memberi nama kolom baru pada mutasi), atau bisa mengganti kolom saat ini (dengan mempertahankan nama kolom yang sama).

32. Mutate dengan fungsi paste()

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  mutate(data.source = paste("LTER"))

Output:

## # A tibble: 344 x 5
##    species island     year sex    data.source
##    <fct>   <fct>     <int> <fct>  <chr>      
##  1 Adelie  Torgersen  2007 male   LTER       
##  2 Adelie  Torgersen  2007 female LTER       
##  3 Adelie  Torgersen  2007 female LTER       
##  4 Adelie  Torgersen  2007 <NA>   LTER       
##  5 Adelie  Torgersen  2007 female LTER       
##  6 Adelie  Torgersen  2007 male   LTER       
##  7 Adelie  Torgersen  2007 female LTER       
##  8 Adelie  Torgersen  2007 male   LTER       
##  9 Adelie  Torgersen  2007 <NA>   LTER       
## 10 Adelie  Torgersen  2007 <NA>   LTER       
## # ... with 334 more rows

33. Mutate dengan perhitungan matematika

Misal kita akan tambahkan kolom panjang flipper dalam satuan centimeter.

Kode:

penguins %>% 
  mutate (flipper_length_cm = flipper_length_mm/10) %>% 
  select(species, sex, flipper_length_cm, flipper_length_mm)

Output:

## # A tibble: 344 x 4
##    species sex    flipper_length_cm flipper_length_mm
##    <fct>   <fct>              <dbl>             <int>
##  1 Adelie  male                18.1               181
##  2 Adelie  female              18.6               186
##  3 Adelie  female              19.5               195
##  4 Adelie  <NA>                NA                  NA
##  5 Adelie  female              19.3               193
##  6 Adelie  male                19                 190
##  7 Adelie  female              18.1               181
##  8 Adelie  male                19.5               195
##  9 Adelie  <NA>                19.3               193
## 10 Adelie  <NA>                19                 190
## # ... with 334 more rows

34. Mutate dengan fungsi row_number()

Langkah ini akan sangat berguna jika kita ingin membuat ID unik pada data kita.

Kode:

penguins %>% 
  select(species, island, year, sex) %>% 
  mutate(penguin.id = paste("penguin", row_number()))

Output:

## # A tibble: 344 x 5
##    species island     year sex    penguin.id
##    <fct>   <fct>     <int> <fct>  <chr>     
##  1 Adelie  Torgersen  2007 male   penguin 1 
##  2 Adelie  Torgersen  2007 female penguin 2 
##  3 Adelie  Torgersen  2007 female penguin 3 
##  4 Adelie  Torgersen  2007 <NA>   penguin 4 
##  5 Adelie  Torgersen  2007 female penguin 5 
##  6 Adelie  Torgersen  2007 male   penguin 6 
##  7 Adelie  Torgersen  2007 female penguin 7 
##  8 Adelie  Torgersen  2007 male   penguin 8 
##  9 Adelie  Torgersen  2007 <NA>   penguin 9 
## 10 Adelie  Torgersen  2007 <NA>   penguin 10
## # ... with 334 more rows

35. Mutate dengan logika if-then-else

Pada poin ini, kita akan menambahkan kolom bernama species.id yang berisi kode dari setiap spesies penguin dalam data kita yaitu Ad untuk Adelie, Ch untuk Chinstrap, dan Ge untuk Gentoo.

Kode:

unique(penguins$species)

Output:

## [1] Adelie    Gentoo    Chinstrap
## Levels: Adelie Chinstrap Gentoo

Kode:

penguins %>% 
  mutate(species.id = if_else(species == "Adelie", "Ad",
                        if_else(species == "Chinstrap", "Ch",
                                "Ge"))) %>% 
  select(species, species.id)

Output:

## # A tibble: 344 x 2
##    species species.id
##    <fct>   <chr>     
##  1 Adelie  Ad        
##  2 Adelie  Ad        
##  3 Adelie  Ad        
##  4 Adelie  Ad        
##  5 Adelie  Ad        
##  6 Adelie  Ad        
##  7 Adelie  Ad        
##  8 Adelie  Ad        
##  9 Adelie  Ad        
## 10 Adelie  Ad        
## # ... with 334 more rows

36. Membuat kolom baru tipe diskrit (dua level): if_else()

Fungsi if_else() dapat kita manfaatkan untuk membuat kolom baru hasil konversi dari dat numerik ke data diskrit.

Misal kita hendak melakukan klasifikasi untuk massa tubuh yang akan kita kelaskan menjadi kelas low jika memiliki berat <= 4500 gram, dan kelas high jika lebih dari 4500 gram.

Kode:

penguins %>% 
  mutate(body_mass_class = if_else(body_mass_g <= 4500, "low", "high")) %>% 
    select(species, body_mass_g, body_mass_class)

Output:

## # A tibble: 344 x 3
##    species body_mass_g body_mass_class
##    <fct>         <int> <chr>          
##  1 Adelie         3750 low            
##  2 Adelie         3800 low            
##  3 Adelie         3250 low            
##  4 Adelie           NA <NA>           
##  5 Adelie         3450 low            
##  6 Adelie         3650 low            
##  7 Adelie         3625 low            
##  8 Adelie         4675 high           
##  9 Adelie         3475 low            
## 10 Adelie         4250 low            
## # ... with 334 more rows

37. Membuat kolom baru tipe diskrit (multiple level): case_when()

Fungsi case_when() mengijinkan kita untuk memasukkan lebih banyak statemen dan lebih mudah dibaca jika dibandingkan dengan fungsi if_else.

Pertama kita masukkan statement kita, selanjutnya untuk kelas terakhir kita hanya perlu menambahkan TRUE ~ "newname".

Misal kita akan kelaskan panjang flipper menjadi kelas low jika panjangnya kurang dari 190 mm; medium jika panjangnya antara 190-201 mm; dan high jika lebih panjang daripada 210 mm.

Kode:

penguins$flipper_length_mm

Output:

##   [1] 181 186 195  NA 193 190 181 195 193 190 186 180 182 191 198 185 195 197 184 194 174 180 189 185 180 187 183 187 172 180 178 178
##  [33] 188 184 195 196 190 180 181 184 182 195 186 196 185 190 182 179 190 191 186 188 190 200 187 191 186 193 181 194 185 195 185 192
##  [65] 184 192 195 188 190 198 190 190 196 197 190 195 191 184 187 195 189 196 187 193 191 194 190 189 189 190 202 205 185 186 187 208
##  [97] 190 196 178 192 192 203 183 190 193 184 199 190 181 197 198 191 193 197 191 196 188 199 189 189 187 198 176 202 186 199 191 195
## [129] 191 210 190 197 193 199 187 190 191 200 185 193 193 187 188 190 192 185 190 184 195 193 187 201 211 230 210 218 215 210 211 219
## [161] 209 215 214 216 214 213 210 217 210 221 209 222 218 215 213 215 215 215 216 215 210 220 222 209 207 230 220 220 213 219 208 208
## [193] 208 225 210 216 222 217 210 225 213 215 210 220 210 225 217 220 208 220 208 224 208 221 214 231 219 230 214 229 220 223 216 221
## [225] 221 217 216 230 209 220 215 223 212 221 212 224 212 228 218 218 212 230 218 228 212 224 214 226 216 222 203 225 219 228 215 228
## [257] 216 215 210 219 208 209 216 229 213 230 217 230 217 222 214  NA 215 222 212 213 192 196 193 188 197 198 178 197 195 198 193 194
## [289] 185 201 190 201 197 181 190 195 181 191 187 193 195 197 200 200 191 205 187 201 187 203 195 199 195 210 192 205 210 187 196 196
## [321] 196 201 190 212 187 198 199 201 193 203 187 197 191 203 202 194 206 189 195 207 202 193 210 198

Kode:

penguins %>% 
  mutate(flipper_length_class = case_when(
    flipper_length_mm >= 210 ~"high",
    flipper_length_mm >= 190 ~"medium",
    TRUE~ "low")) %>% 
    select(species, flipper_length_mm, flipper_length_class)

Output:

## # A tibble: 344 x 3
##    species flipper_length_mm flipper_length_class
##    <fct>               <int> <chr>               
##  1 Adelie                181 low                 
##  2 Adelie                186 low                 
##  3 Adelie                195 medium              
##  4 Adelie                 NA low                 
##  5 Adelie                193 medium              
##  6 Adelie                190 medium              
##  7 Adelie                181 low                 
##  8 Adelie                195 medium              
##  9 Adelie                193 medium              
## 10 Adelie                190 medium              
## # ... with 334 more rows

Selanjutnya, untuk memberikan urutan atau tingkatan kelas (data ordinal) menjadi urutan low-medium-high, kita bisa gunakan factor().

Kode:

penguins %>% 
  mutate(flipper_length_class = case_when(
    flipper_length_mm >= 210 ~"high",
    flipper_length_mm >= 190 ~"medium",
    TRUE~ "low")) %>% 
    select(species, flipper_length_mm, flipper_length_class) %>% 
  mutate(flipper_length_class = factor(flipper_length_class,
                                   levels = c("low", "medium", 
                                              "high")))

Output:

## # A tibble: 344 x 3
##    species flipper_length_mm flipper_length_class
##    <fct>               <int> <fct>               
##  1 Adelie                181 low                 
##  2 Adelie                186 low                 
##  3 Adelie                195 medium              
##  4 Adelie                 NA low                 
##  5 Adelie                193 medium              
##  6 Adelie                190 medium              
##  7 Adelie                181 low                 
##  8 Adelie                195 medium              
##  9 Adelie                193 medium              
## 10 Adelie                190 medium              
## # ... with 334 more rows

Part 6: Merangkum data

Menghitung jumlah data

38. Menghitung jumlah observasi: count()

Kita dapat menggunakan fungsi count() untuk mengetahui jumlah observasi pada variabel yang spesifik.

Misal jumlah observasi berdasarkan spesies.

Kode:

penguins %>% 
  count(species)

Output:

## # A tibble: 3 x 2
##   species       n
##   <fct>     <int>
## 1 Adelie      152
## 2 Chinstrap    68
## 3 Gentoo      124

Jumlah observasi berdasarkan jenis kelaminnya.

Kode:

penguins %>% 
  count(sex)

Output:

## # A tibble: 3 x 2
##   sex        n
##   <fct>  <int>
## 1 female   165
## 2 male     168
## 3 <NA>      11

Atau berdasarkan keduanya.

Kode:

penguins %>% 
  count(species,sex)

Output:

## # A tibble: 8 x 3
##   species   sex        n
##   <fct>     <fct>  <int>
## 1 Adelie    female    73
## 2 Adelie    male      73
## 3 Adelie    <NA>       6
## 4 Chinstrap female    34
## 5 Chinstrap male      34
## 6 Gentoo    female    58
## 7 Gentoo    male      61
## 8 Gentoo    <NA>       5

39. Menambahkan kolom yang berisi jumlah observasi

Beberapa fungsi yang dapat kita gunakan:

  • tally() – menghitung jumlah total observasi
  • add_tally() – menghitung jumlah total observasi dan memindahnya ke kolom baru
  • add_count() – mengambil variabel sebagai argumen dan menambah kolom baru yang berisi jumlah observasi.

Kode:

penguins %>% 
  tally()

Output:

## # A tibble: 1 x 1
##       n
##   <int>
## 1   344

Kode:

penguins %>% 
  select(species, sex) %>% 
  add_tally()

Output:

## # A tibble: 344 x 3
##    species sex        n
##    <fct>   <fct>  <int>
##  1 Adelie  male     344
##  2 Adelie  female   344
##  3 Adelie  female   344
##  4 Adelie  <NA>     344
##  5 Adelie  female   344
##  6 Adelie  male     344
##  7 Adelie  female   344
##  8 Adelie  male     344
##  9 Adelie  <NA>     344
## 10 Adelie  <NA>     344
## # ... with 334 more rows

Kode:

penguins %>% 
  select(species, sex) %>% 
  add_count(species,sex)

Output:

## # A tibble: 344 x 3
##    species sex        n
##    <fct>   <fct>  <int>
##  1 Adelie  male      73
##  2 Adelie  female    73
##  3 Adelie  female    73
##  4 Adelie  <NA>       6
##  5 Adelie  female    73
##  6 Adelie  male      73
##  7 Adelie  female    73
##  8 Adelie  male      73
##  9 Adelie  <NA>       6
## 10 Adelie  <NA>       6
## # ... with 334 more rows

Merangkum data

40. Fungsi summarise()

Untuk menggunakan fungsi summarize (), cukup tambahkan nama kolom baru = fungsi matematika yang dikehendaki atau nama_kolom = fungsi (variabel).

Contoh di bawah ini adalah untuk menghitung nilai mean dan max, dengan menambahkan na.omit untuk mengabaikan nilai NA dalam perhitungan.

Kode:

penguins %>% 
  summarise(mean_mass = mean(na.omit(body_mass_g)), 
            max_mass = max(na.omit(body_mass_g)))

Output:

## # A tibble: 1 x 2
##   mean_mass max_mass
##       <dbl>    <int>
## 1     4202.     6300

41. Merangkum berdasarkan kelompok: fungsi group_by()

Untuk merangkum berdasarkan grup, tentukan variabel sebagai dasar pengelompokan menggunakan fungsi group_by ().

Kode:

penguins %>% 
  group_by(species) %>% 
  summarise(mean_mass = mean(na.omit(body_mass_g)), 
            max_mass = max(na.omit(body_mass_g)))

Output:

## # A tibble: 3 x 3
##   species   mean_mass max_mass
##   <fct>         <dbl>    <int>
## 1 Adelie        3701.     4775
## 2 Chinstrap     3733.     4800
## 3 Gentoo        5076.     6300

Summarise() bekerja dengan hampir semua fungsi agregat, dan memungkinkan aritmatika tambahan:

  • n () – memberikan jumlah observasi
  • n_distinct (var) – memberikan jumlah nilai unik var
  • sum(var), max(var), min(var),.
  • mean(var), median(var), sd(var), IQR(var).

42. Ringkas semua kolom: summarise_all()

Fungsi summarise_all () membutuhkan fungsi sebagai argumen, yang akan diterapkan ke semua kolom.

Kode:

penguins %>% 
  group_by(species) %>% 
  summarise_all(mean, na.rm= TRUE)

Output:

## # A tibble: 3 x 8
##   species   island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g   sex  year
##   <fct>      <dbl>          <dbl>         <dbl>             <dbl>       <dbl> <dbl> <dbl>
## 1 Adelie        NA           38.8          18.3              190.       3701.    NA 2008.
## 2 Chinstrap     NA           48.8          18.4              196.       3733.    NA 2008.
## 3 Gentoo        NA           47.5          15.0              217.       5076.    NA 2008.

43. Ringkas semua kolom: summarise_if()

Fungsi summarise_if() membutuhkan dua argumen:

  • Pertama, dia membutuhkan informasi tentang kolom yang ingin dipertimbangkan.
  • Kedua, diperlukan informasi tentang bagaimana meringkas data itu, yang perlu menjadi suatu fungsi.

Sebagai contoh, kita akan melakukan perhitungan nilai rata-rata (mean), untuk semua kolom yang memiliki tipe data numerik

Kode:

penguins %>% 
  group_by(species) %>% 
  summarise_if(is.numeric, mean, na.rm= TRUE)

Output:

## # A tibble: 3 x 6
##   species   bill_length_mm bill_depth_mm flipper_length_mm body_mass_g  year
##   <fct>              <dbl>         <dbl>             <dbl>       <dbl> <dbl>
## 1 Adelie              38.8          18.3              190.       3701. 2008.
## 2 Chinstrap           48.8          18.4              196.       3733. 2008.
## 3 Gentoo              47.5          15.0              217.       5076. 2008.

Cheatsheet

Untuk lebih memudahkan proses belajar, silahkan juga didownload cheatsheet di bawah ini.

Wrap up

Demikian tutorial data manipulation di R menggunakan package dplyr.

Tulisan ini akan selalu diupdate secara berkala.

Bookmark post ini agar dapat diakses dengan cepat saat kita membutuhkan.

Jika menemui kendala atau kesulitan, silahkan langsung bertanya melalui kolom komentar di bawah ya!

About The Author

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top