Menu

dplyr di R: pengantar praktis filter, select, mutate, summarize

Apa itu dplyr, cara memasangnya, dan bagaimana enam verb intinya plus pipe mengubah kode data frame yang berantakan menjadi pipeline yang mudah dibaca.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Apa itu dplyr

dplyr adalah package R paling populer untuk mengolah data, sebuah "tata bahasa data" yang dibangun dari segelintir verb. Setiap verb adalah fungsi yang menerima data frame, melakukan tepat satu tugas (mempertahankan sebagian baris, menambah kolom, menghitung ringkasan per kelompok), lalu mengembalikan data frame baru. Karena setiap verb punya bentuk yang sama (data frame masuk, data frame keluar), semuanya bisa disambung dengan pipe menjadi pipeline yang terbaca dari atas ke bawah seperti resep. dplyr adalah inti dari tidyverse, keluarga package (tidyr, ggplot2, readr) yang berbagi desain ini.

Semua yang dilakukan dplyr juga bisa dilakukan base R. Berikut analisis kecil dalam base R murni: saring data bawaan mtcars menjadi mobil 4 silinder, hitung kolom baru, lalu rata-ratakan berdasarkan jumlah gigi. Yang ini bisa dijalankan:

Itu berhasil, dan itu kode R yang bagus. Tapi perhatikan bagaimana ceritanya tercecer di antara pengindeksan dengan kurung siku, penugasan $, dan sebuah formula. Versi dplyr dari analisis yang sama:

library(dplyr)

mtcars |>
    filter(cyl == 4) |>
    mutate(kml = mpg * 0.425) |>
    group_by(gear) |>
    summarize(avg_kml = round(mean(kml), 1))

Empat verb, dalam urutan yang sama seperti saat kamu menjelaskannya dengan suara keras. Keterbacaan itulah inti tawarannya, dan pada pipeline dua puluh langkah, keterbacaan itu menentukan.

Potongan kode dplyr di halaman ini statis karena editor ini hanya menjalankan base R. Untuk menjalankannya, pasang dplyr di komputermu sendiri seperti ditunjukkan berikut ini.

Memasang dan memuat

Pasang sekali, lalu muat di setiap skrip yang memakainya:

install.packages("dplyr")   # once, per machine
library(dplyr)              # every script

Menjalankan install.packages("tidyverse") sebagai gantinya akan memasang dplyr beserta saudara-saudaranya. Saat dplyr dimuat, ia memberi peringatan bahwa ia menutupi stats::filter dan stats::lag; itu normal, bukan error.

Enam verb inti

Setiap verb menerima data frame sebagai argumen pertamanya dan nama kolom apa adanya, tanpa tanda kutip atau awalan df$.

filter() mempertahankan baris yang memenuhi sebuah kondisi:

mtcars |> filter(mpg > 25)
mtcars |> filter(cyl == 4, hp < 70)   # comma = AND

select() mempertahankan kolom berdasarkan nama, rentang, atau helper:

mtcars |> select(mpg, cyl, hp)
mtcars |> select(mpg:hp)              # a range of adjacent columns
mtcars |> select(starts_with("d"))    # disp, drat

mutate() menambah atau mengubah kolom:

mtcars |> mutate(kml = mpg * 0.425, heavy = wt > 3.5)

arrange() mengurutkan baris; bungkus kolom dengan desc() untuk urutan menurun:

mtcars |> arrange(desc(mpg))

summarize() meringkas baris-baris menjadi satu baris ringkasan, dan group_by() membuatnya meringkas per kelompok:

mtcars |>
    group_by(cyl) |>
    summarize(n = n(), avg_mpg = mean(mpg))

group_by() sendiri tidak melakukan apa pun yang terlihat; ia hanya menandai data frame supaya summarize() (atau mutate()) berikutnya bekerja per kelompok. Setiap verb punya dokumentasi lengkap di bab ini: menyaring baris, menambah kolom, mengurutkan, dan ringkasan per kelompok.

Merangkai verb dengan pipe

Pipe |> mengambil nilai di depannya dan memasukkannya sebagai argumen pertama fungsi sesudahnya: x |> f(y) berarti f(x, y). Karena setiap verb dplyr menerima dan mengembalikan data frame, verb bisa dirangkai tanpa batas:

mtcars |>
    filter(hp > 100) |>
    mutate(kml = mpg * 0.425) |>
    group_by(cyl) |>
    summarize(cars = n(), avg_kml = round(mean(kml), 1)) |>
    arrange(desc(avg_kml))

Bacalah dengan suara keras: ambil mtcars, pertahankan mobil dengan tenaga di atas 100 horsepower, tambahkan kolom km per liter, kelompokkan berdasarkan jumlah silinder, hitung dan rata-ratakan setiap kelompok, urutkan berdasarkan rata-ratanya. Tanpa variabel perantara, tanpa kode bersarang. Kode lama memakai %>% dari package magrittr sebagai ganti |>; untuk pekerjaan dplyr keduanya bisa saling menggantikan, dan |> (bawaan R 4.1+) dibahas di dokumentasi pipe.

count() dan n(): helper untuk menghitung

Menghitung begitu sering dilakukan sampai dplyr punya jalan pintasnya. n() memberikan jumlah baris di kelompok saat ini (hanya berlaku di dalam summarize() atau mutate()), dan count() meringkas seluruh rangkaian group_by() + summarize(n = n()) menjadi satu pemanggilan:

mtcars |> count(cyl)                    # rows per cyl value
mtcars |> count(cyl, gear, sort = TRUE) # two groupers, biggest first

Kalau kamu mendapati dirimu menulis group_by(x) |> summarize(n = n()), ganti dengan count(x).

Catatan tentang tibble

Verb dplyr sering mengembalikan tibble, varian data frame dari tidyverse. Tibble adalah data frame (semua yang menerima data frame juga menerima tibble), dengan tampilan cetak yang lebih ramah: hanya 10 baris pertama, hanya kolom yang muat, dengan tipe yang ditampilkan di bawah setiap nama. Dua perbedaan yang perlu diketahui: tibble tidak pernah memakai nama baris (itulah sebabnya mtcars |> as_tibble() kehilangan nama-nama mobil; tidyverse mengharapkan pengenal berada di kolom sungguhan), dan pengindeksan dengan kurung siku tunggal selalu mengembalikan tibble, bukan kadang-kadang turun menjadi vector. Keduanya seharusnya tidak mengejutkanmu sehari-hari; jangan panik saja saat str() mengatakan tbl_df.

Yang kamu bawa pulang

  • dplyr adalah tata bahasa: enam verb, masing-masing melakukan satu tugas pada data frame, dirangkai dengan pipe.
  • filter() memilih baris, select() memilih kolom, mutate() menambah kolom, arrange() mengurutkan, group_by() + summarize() mengagregasi.
  • x |> f(y) sama dengan f(x, y): pipeline terbaca dari atas ke bawah sesuai urutan kejadiannya.
  • count() dan n() mencakup sebagian besar kebutuhan menghitung.
  • Base R bisa melakukan semuanya; dplyr unggul dalam keterbacaan begitu pipeline bertambah panjang.

Berikutnya: menyaring dan subsetting secara mendalam, yaitu idiom kurung siku base R dan posisi filter() dari dplyr di antaranya.

Pertanyaan yang sering diajukan

Apa itu dplyr di R?

dplyr adalah package R yang paling banyak dipakai untuk mengolah data frame. Package ini memberimu sekumpulan kecil verb, yaitu filter(), select(), mutate(), arrange(), summarize(), group_by(), yang masing-masing melakukan satu hal pada data frame dan bisa dirangkai dengan pipe menjadi pipeline yang mudah dibaca. dplyr adalah bagian dari tidyverse.

Bagaimana cara memasang dplyr?

Jalankan install.packages("dplyr") sekali, lalu library(dplyr) di bagian atas setiap skrip yang memakainya. Memasang tidyverse sebagai gantinya memberimu dplyr plus package saudaranya (tidyr, ggplot2, readr) sekaligus.

Apakah aku butuh dplyr, atau base R sudah cukup?

Base R bisa melakukan semua yang dilakukan dplyr (subsetting, aggregate(), order()), dan layak dikuasai karena bisa dipakai di mana saja tanpa dependensi. dplyr layak dipasang saat pipeline makin panjang: lima verb yang dirangkai terbaca seperti kalimat, sedangkan padanannya di base R terbaca seperti teka-teki kurung bersarang.

Apa perbedaan summarize dan summarise di dplyr?

Tidak ada. Keduanya fungsi yang sama dengan ejaan Amerika dan Inggris; dplyr menyediakan keduanya. Pakai yang dipakai timmu dan tetap konsisten.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai