Tutorial Dplyr: Menggabungkan dan Menggabungkan Data di R dengan Contoh
Pengantar Analisis Data
Analisis data dapat dibagi menjadi tiga bagian:
- Pencabutan: Pertama, kita perlu mengumpulkan data dari berbagai sumber dan menggabungkannya.
- Mengubah: Langkah ini melibatkan manipulasi data. Setelah kami mengkonsolidasikan semua sumber data, kami dapat mulai membersihkan data.
- Membayangkan: Langkah terakhir adalah memvisualisasikan data kita untuk memeriksa ketidakteraturan.

Salah satu tantangan paling signifikan yang dihadapi oleh data scientist adalah manipulasi data. Data tidak pernah tersedia dalam format yang diinginkan. Ilmuwan data perlu menghabiskan setidaknya separuh waktunya untuk membersihkan dan memanipulasi data. Itu adalah salah satu tugas paling penting dalam pekerjaan. Jika proses manipulasi data tidak lengkap, tepat dan teliti, model tidak akan bekerja dengan benar.
R Dplyr
R memiliki perpustakaan bernama dplyr untuk membantu transformasi data. Pustaka dplyr pada dasarnya dibuat dengan empat fungsi untuk memanipulasi data dan lima kata kerja untuk membersihkan data. Setelah itu, kita bisa menggunakan perpustakaan ggplot untuk menganalisis dan memvisualisasikan data.
Kita akan belajar bagaimana menggunakan perpustakaan dplyr untuk memanipulasi a Bingkai Data.
Gabungkan Data dengan R Dplyr
dplyr menyediakan cara yang bagus dan nyaman untuk menggabungkan kumpulan data. Kita mungkin memiliki banyak sumber data masukan, dan pada titik tertentu, kita perlu menggabungkannya. Gabungan dengan dplyr menambahkan variabel di sebelah kanan kumpulan data asli.
Dplyr Bergabung
Berikut ini adalah empat jenis gabungan penting yang digunakan dalam dplyr untuk menggabungkan dua kumpulan data:
fungsi | Tujuan | kasus | Beberapa kunci |
---|---|---|---|
kiri_gabung() | Gabungkan dua kumpulan data. Simpan semua pengamatan dari tabel asal | data, asal, tujuan, oleh = “ID” | asal, tujuan, oleh = c(“ID”, “ID2”) |
kanan_gabung() | Gabungkan dua kumpulan data. Simpan semua pengamatan dari tabel tujuan | data, asal, tujuan, oleh = “ID” | asal, tujuan, oleh = c(“ID”, “ID2”) |
inner_join() | Gabungkan dua kumpulan data. Tidak termasuk semua baris yang tidak cocok | data, asal, tujuan, oleh = “ID” | asal, tujuan, oleh = c(“ID”, “ID2”) |
gabung_penuh() | Gabungkan dua kumpulan data. Menyimpan semua pengamatan | data, asal, tujuan, oleh = “ID” | asal, tujuan, oleh = c(“ID”, “ID2”) |
Kita akan mempelajari semua jenis gabungan melalui contoh mudah.
Pertama-tama, kami membuat dua kumpulan data. Tabel 1 berisi dua variabel, ID, dan y, sedangkan Tabel 2 berisi ID dan z. Dalam setiap situasi, kita perlu memiliki a pasangan kunci variabel. Dalam kasus kami, ID adalah milik kami kunci variabel. Fungsi ini akan mencari nilai yang identik di kedua tabel dan mengikat nilai yang dikembalikan di sebelah kanan tabel 1.
library(dplyr) df_primary <- tribble( ~ID, ~y, "A", 5, "B", 5, "C", 8, "D", 0, "F", 9) df_secondary <- tribble( ~ID, ~z, "A", 30, "B", 21, "C", 22, "D", 25, "E", 29)
Dplyr kiri_gabung()
Cara paling umum untuk menggabungkan dua kumpulan data adalah dengan menggunakan fungsi left_join(). Kita dapat melihat dari gambar di bawah bahwa pasangan kunci sangat cocok dengan baris A, B, C dan D dari kedua dataset. Namun, E dan F tersisa. Bagaimana kita memperlakukan kedua pengamatan ini? Dengan left_join(), kita akan menyimpan semua variabel di tabel asli dan tidak mempertimbangkan variabel yang tidak memiliki pasangan kunci di tabel tujuan. Dalam contoh kita, variabel E tidak ada pada tabel 1. Oleh karena itu, baris tersebut akan dihilangkan. Variabel F berasal dari tabel asal; itu akan disimpan setelah left_join() dan mengembalikan NA di kolom z. Gambar di bawah mereproduksi apa yang akan terjadi dengan left_join().
Contoh dplyr left_join()
left_join(df_primary, df_secondary, by ='ID')
Keluaran:
## # A tibble: 5 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 F 9 NA
Dplyr kanan_join()
Fungsi right_join() bekerja persis seperti left_join(). Satu-satunya perbedaan adalah barisnya dihilangkan. Nilai E, tersedia di bingkai data tujuan, ada di tabel baru dan mengambil nilai NA untuk kolom y.
Contoh dplyr right_join()
right_join(df_primary, df_secondary, by = 'ID')
Keluaran:
## # A tibble: 5 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 E NA 29
Dplyr inner_join()
Ketika kami 100% yakin bahwa kedua kumpulan data tersebut tidak cocok, kami dapat mempertimbangkan untuk kembali hanya baris yang ada di kedua Himpunan data. Hal ini dimungkinkan ketika kita memerlukan kumpulan data yang bersih atau ketika kita tidak ingin memperhitungkan nilai yang hilang dengan mean atau median.
inner_join() datang untuk membantu. Fungsi ini mengecualikan baris yang tidak cocok.
Contoh dplyr inner_join()
inner_join(df_primary, df_secondary, by ='ID')
Keluaran:
## # A tibble: 4 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25
Dplyr full_join()
Terakhir, fungsi full_join() menyimpan semua observasi dan mengganti nilai yang hilang dengan NA.
Contoh dplyr full_join()
full_join(df_primary, df_secondary, by = 'ID')
Keluaran:
## # A tibble: 6 x 3 ## ID y.x y.y ## <chr> <dbl> <dbl> ## 1 A 5 30 ## 2 B 5 21 ## 3 C 8 22 ## 4 D 0 25 ## 5 F 9 NA ## 6 E NA 29
Beberapa pasangan Kunci
Terakhir, kita dapat memiliki beberapa kunci dalam kumpulan data kita. Pertimbangkan kumpulan data berikut yang berisi tahun atau daftar produk yang dibeli oleh pelanggan.
Jika kita mencoba menggabungkan kedua tabel, R akan menampilkan kesalahan. Untuk memperbaiki situasi tersebut, kita dapat meneruskan dua variabel pasangan kunci. Yaitu, ID dan tahun yang muncul di kedua kumpulan data. Kita dapat menggunakan kode berikut untuk menggabungkan tabel1 dan tabel 2
df_primary <- tribble( ~ID, ~year, ~items, "A", 2015,3, "A", 2016,7, "A", 2017,6, "B", 2015,4, "B", 2016,8, "B", 2017,7, "C", 2015,4, "C", 2016,6, "C", 2017,6) df_secondary <- tribble( ~ID, ~year, ~prices, "A", 2015,9, "A", 2016,8, "A", 2017,12, "B", 2015,13, "B", 2016,14, "B", 2017,6, "C", 2015,15, "C", 2016,15, "C", 2017,13) left_join(df_primary, df_secondary, by = c('ID', 'year'))
Keluaran:
## # A tibble: 9 x 4 ## ID year items prices ## <chr> <dbl> <dbl> <dbl> ## 1 A 2015 3 9 ## 2 A 2016 7 8 ## 3 A 2017 6 12 ## 4 B 2015 4 13 ## 5 B 2016 8 14 ## 6 B 2017 7 6 ## 7 C 2015 4 15 ## 8 C 2016 6 15 ## 9 C 2017 6 13
Fungsi Pembersihan Data di R
Berikut ini adalah empat fungsi penting untuk merapikan (membersihkan) data:
fungsi | Tujuan | kasus |
---|---|---|
mengumpulkan() | Ubah data dari lebar menjadi panjang | (data, kunci, nilai, na.rm = FALSE) |
menyebar() | Ubah data dari panjang menjadi lebar | (data, kunci, nilai) |
memisahkan() | Pisahkan satu variabel menjadi dua | (data, kolom, ke, sep= “”, hapus = BENAR) |
satuan() | Satukan dua variabel menjadi satu | (data, kolom, kesimpulan ,sep= “”, hapus = BENAR) |
Kami menggunakan perpustakaan yang lebih rapi. Perpustakaan ini milik kumpulan perpustakaan untuk memanipulasi, membersihkan dan memvisualisasikan data. Jika kita menginstal R dengan anaconda, perpustakaan sudah terinstal. Kita dapat menemukan perpustakaannya di sini, https://anaconda.org/r/r-tidyr.
Jika belum terinstal, masukkan perintah berikut untuk menginstal tidyr:
install tidyr : install.packages("tidyr")
mengumpulkan()
Tujuan dari fungsi Gather() adalah mengubah data dari lebar menjadi panjang.
Sintaksis
gather(data, key, value, na.rm = FALSE) Arguments: -data: The data frame used to reshape the dataset -key: Name of the new column created -value: Select the columns used to fill the key column -na.rm: Remove missing values. FALSE by default
Example
Di bawah ini, kita dapat memvisualisasikan konsep pembentukan kembali lebar menjadi panjang. Kita ingin membuat satu kolom bernama pertumbuhan, diisi dengan baris-baris variabel kuartal.
library(tidyr) # Create a messy dataset messy <- data.frame( country = c("A", "B", "C"), q1_2017 = c(0.03, 0.05, 0.01), q2_2017 = c(0.05, 0.07, 0.02), q3_2017 = c(0.04, 0.05, 0.01), q4_2017 = c(0.03, 0.02, 0.04)) messy
Keluaran:
## country q1_2017 q2_2017 q3_2017 q4_2017 ## 1 A 0.03 0.05 0.04 0.03 ## 2 B 0.05 0.07 0.05 0.02 ## 3 C 0.01 0.02 0.01 0.04
# Reshape the data tidier <-messy %>% gather(quarter, growth, q1_2017:q4_2017) tidier
Keluaran:
## country quarter growth ## 1 A q1_2017 0.03 ## 2 B q1_2017 0.05 ## 3 C q1_2017 0.01 ## 4 A q2_2017 0.05 ## 5 B q2_2017 0.07 ## 6 C q2_2017 0.02 ## 7 A q3_2017 0.04 ## 8 B q3_2017 0.05 ## 9 C q3_2017 0.01 ## 10 A q4_2017 0.03 ## 11 B q4_2017 0.02 ## 12 C q4_2017 0.04
Dalam fungsi kumpulkan(), kita membuat dua variabel baru kuartal dan pertumbuhan karena kumpulan data asli kita memiliki satu variabel grup: yaitu negara dan pasangan nilai kunci.
menyebar()
Fungsi spread() melakukan kebalikan dari fungsi berkumpul.
Sintaksis
spread(data, key, value) arguments: data: The data frame used to reshape the dataset key: Column to reshape long to wide value: Rows used to fill the new column
Example
Kita dapat membentuk kembali kumpulan data yang lebih rapi menjadi berantakan dengan spread()
# Reshape the data messy_1 <- tidier %>% spread(quarter, growth) messy_1
Keluaran:
## country q1_2017 q2_2017 q3_2017 q4_2017 ## 1 A 0.03 0.05 0.04 0.03 ## 2 B 0.05 0.07 0.05 0.02 ## 3 C 0.01 0.02 0.01 0.04
memisahkan()
Fungsi Separate() membagi kolom menjadi dua berdasarkan pemisah. Fungsi ini berguna dalam beberapa situasi di mana variabelnya adalah tanggal. Analisis kami mungkin memerlukan fokus pada bulan dan tahun dan kami ingin memisahkan kolom menjadi dua variabel baru.
Sintaksis
separate(data, col, into, sep= "", remove = TRUE) arguments: -data: The data frame used to reshape the dataset -col: The column to split -into: The name of the new variables -sep: Indicates the symbol used that separates the variable, i.e.: "-", "_", "&" -remove: Remove the old column. By default sets to TRUE.
Example
Kita dapat memisahkan kuartal dari tahun dalam kumpulan data yang lebih rapi dengan menerapkan fungsi terpisah().
separate_tidier <-tidier %>% separate(quarter, c("Qrt", "year"), sep ="_") head(separate_tidier)
Keluaran:
## country Qrt year growth ## 1 A q1 2017 0.03 ## 2 B q1 2017 0.05 ## 3 C q1 2017 0.01 ## 4 A q2 2017 0.05 ## 5 B q2 2017 0.07 ## 6 C q2 2017 0.02
bersatu()
Fungsi unite() menggabungkan dua kolom menjadi satu.
Sintaksis
unit(data, col, conc ,sep= "", remove = TRUE) arguments: -data: The data frame used to reshape the dataset -col: Name of the new column -conc: Name of the columns to concatenate -sep: Indicates the symbol used that unites the variable, i.e: "-", "_", "&" -remove: Remove the old columns. By default, sets to TRUE
Example
Dalam contoh di atas, kita memisahkan kuartal dari tahun. Bagaimana jika kita ingin menggabungkannya? Kita gunakan kode berikut:
unit_tidier <- separate_tidier %>% unite(Quarter, Qrt, year, sep ="_") head(unit_tidier)
Keluaran:
## country Quarter growth ## 1 A q1_2017 0.03 ## 2 B q1_2017 0.05 ## 3 C q1_2017 0.01 ## 4 A q2_2017 0.05 ## 5 B q2_2017 0.07 ## 6 C q2_2017 0.02
Ringkasan
- Analisis data dapat dibagi menjadi tiga bagian: Ekstraksi, Transformasi, dan Visualisasikan.
- R memiliki perpustakaan bernama dplyr untuk membantu transformasi data. Pustaka dplyr pada dasarnya dibuat dengan empat fungsi untuk memanipulasi data dan lima kata kerja untuk membersihkan data.
- dplyr menyediakan cara yang bagus dan nyaman untuk menggabungkan kumpulan data. Gabungan dengan dplyr menambahkan variabel di sebelah kanan kumpulan data asli.
- Keunggulan dplyr adalah ia menangani empat jenis gabungan yang serupa SQL:
- kiri_gabung() – Untuk menggabungkan dua kumpulan data dan menyimpan semua observasi dari tabel asal.
- kanan_gabung() – Untuk menggabungkan dua dataset dan menyimpan semua observasi dari tabel tujuan.
- inner_join() – Untuk menggabungkan dua kumpulan data dan mengecualikan semua baris yang tidak cocok.
- gabung_penuh() – Untuk menggabungkan dua kumpulan data dan menyimpan semua observasi.
- Dengan menggunakan Tidyr Library, Anda dapat mengubah kumpulan data menggunakan fungsi berikut:
- mengumpulkan(): Mengubah data dari lebar menjadi panjang.
- menyebar(): Mengubah data dari panjang menjadi lebar.
- memisahkan(): Membagi satu variabel menjadi dua.
- satuan(): Menyatukan dua variabel menjadi satu.