Dalam praktiknya, data disimpan di server yang berbeda dan ada di banyak file berbeda. Ketika data yang Anda perlukan berasal dari berbagai sumber, penting untuk mengetahui cara menggabungkannya agar Anda kehilangan sesedikit mungkin informasi dan membuat pasangan yang benar-benar masuk akal sesuai dengan struktur data Anda.
Tutorial ini akan memandu Anda melalui:
- Menggabungkan dataset secara horizontal dan vertikal
- Apa itu kunci primer dan bagaimana kunci tersebut menambah struktur pada data Anda
- Berbagai jenis join (misalnya, left-join, inner-join, full-join) dan cara memilih di antaranya
- Satu masalah umum yang perlu diwaspadai dan cara menyelesaikannya
Menggabungkan Dataset
Secara garis besar, ada dua cara Anda dapat menggabungkan dataset; Anda dapat menambahkan informasi dengan menambah baris atau dengan menambah kolom ke dataset Anda. Secara umum, ketika Anda memiliki dataset yang memiliki himpunan kolom yang sama atau memiliki himpunan observasi yang sama, Anda dapat menggabungkannya secara vertikal atau horizontal, masing-masing. Mari belajar melalui beberapa contoh.
Menambahkan dataset secara vertikal
Ketika Anda memiliki beberapa dataset dengan himpunan kolom yang sama, Anda dapat menggabungkan satu dataset dengan dataset lain secara vertikal. Artinya, dengan mempertahankan kolom pada dataset Anda, Anda dapat menambahkan lebih banyak baris ke dalamnya. Menyatukan informasi seperti itu dalam satu file akan memudahkan Anda untuk melakukan agregasi dan melihat gambaran besarnya tanpa repot bolak-balik di antara banyak file dan kehilangan jejak.
Dataset 1
| Make | Num models |
|---|---|
| Honda | 63 |
| BMW | 10 |
Dataset 2
| Make | Num models |
|---|---|
| Ford | 26 |
| Tesla | 4 |
Penting untuk dicatat bahwa jika Anda memiliki observasi yang sama di beberapa dataset dan Anda menggabungkannya secara vertikal menggunakan rbind(), Anda akan berakhir dengan observasi duplikat di tabel Anda. Dan meskipun kedua dataset harus memiliki himpunan variabel yang sama (yaitu kolom), urutannya tidak harus sama. Lihat sendiri di konsol di bawah ini!
Di ruang kerja Anda, ada dua dataset bernama dataset1 dan dataset2 seperti yang Anda lihat di atas. Cobalah mengubah urutan kolom dataset1. Panggil rbind() pada dataset1 dan dataset2 serta reordered_dataset1 dan dataset2.
dataset1 <- data.frame(make = c("Honda", "BMW"),
num_models = c(63, 10))
dataset2 <- data.frame(make = c("Ford", "Tesla"),
num_models = c(26, 4))
# Add datasets vertically
rbind(dataset1, dataset2)
# Reorder columns
reordered_dataset1 <- dataset1[, c(2, 1)]
# See that rbind() is robust to column ordering
rbind(reordered_dataset1, dataset2)
Setelah rbind(), hasil Anda seharusnya memuat informasi tentang keempat merek mobil dalam satu tabel seperti ini:
Dataset yang digabung secara vertikal
| Make | Num models |
|---|---|
| Honda | 63 |
| BMW | 10 |
| Ford | 26 |
| Tesla | 4 |
Mulai Belajar R Secara Gratis
R Tingkat Menengah
Menambahkan dataset secara horizontal
Ketika Anda memiliki dataset yang mewakili himpunan observasi yang sama, Anda dapat menggabungkan dataset tersebut secara horizontal. Kali ini, dengan mempertahankan baris dari dataset Anda, Anda dapat menambahkan lebih banyak kolom ke dalamnya. Dalam kasus seperti ini, Anda harus memeriksa bahwa urutan observasinya sama. Jika dataset Anda memiliki jumlah baris yang berbeda, atau jumlah barisnya sama tetapi urutan barisnya tidak konsisten, Anda dapat memasangkan satu himpunan kolom dengan himpunan lainnya dengan cara yang tidak masuk akal.
Mari kita lanjutkan contoh di atas. Misalkan Anda memiliki dua file data, satu berisi merek mobil dan jumlah model unik yang ditawarkan, dan satu lagi berisi merek mobil dan total penjualan:
Jumlah model unik yang ditawarkan
| Make | Num models |
|---|---|
| Honda | 63 |
| BMW | 10 |
| Ford | 26 |
| Tesla | 4 |
Total penjualan
| Make | Sales |
|---|---|
| Ford | 119157 |
| BMW | 25908 |
| Honda | 188328 |
| Tesla | 29975 |
Penting untuk dicatat bahwa jika Anda memiliki observasi yang sama di beberapa dataset dan Anda menggabungkannya secara horizontal menggunakan cbind(), Anda akan berakhir dengan kolom yang redundan di tabel Anda. Dan meskipun kedua dataset memuat informasi yang terkait, urutan baris sangat berpengaruh!
Pada konsol di bawah, panggil cbind() pada models dan sales lalu cetak hasilnya:
models <- data.frame(make = c("Honda", "BMW", "Ford", "Tesla"),
num_models = c(63, 10, 26, 4))
sales <- data.frame(make = c("Ford", "BMW", "Honda", "Tesla"),
sales = c(119157, 25908, 188328, 29975))
# Add datasets horizontally
cbind(models, sales)
Anda seharusnya mendapatkan sesuatu seperti ini:
Model & Penjualan
| Make | Num models | Make | Sales |
|---|---|---|---|
| Honda | 63 | Ford | 119157 |
| BMW | 10 | BMW | 25908 |
| Ford | 26 | Honda | 188328 |
| Tesla | 4 | Tesla | 29975 |
Apakah Anda melihat masalahnya? Data ini tidak rapi!
Menurut prinsip data rapi yang diajarkan dalam kursus dasar ini, setiap observasi dalam sebuah dataset harus diwakili dalam satu baris yang unik. Lalu bagaimana jika Anda hanya memiliki informasi pada sebagian baris di salah satu dataset dan ingin menambahkan informasi hanya untuk baris-baris yang memiliki informasi tambahan? Dengan kata lain, bagaimana jika Anda ingin menambahkan lebih banyak kolom dari satu dataset ke dataset lain, tetapi kedua dataset ini tidak memiliki jumlah observasi yang sama?
Kunci Primer dan Kunci Asing
Langkah pertama saat ingin menggabungkan dataset adalah mencari kunci primer dari dataset Anda. Kunci primer adalah kolom atau himpunan kolom yang secara unik mengidentifikasi setiap observasi dalam dataset Anda. Pada contoh merek mobil, jumlah model unik yang ditawarkan, dan total penjualan, kunci primer dari dataset Anda adalah kolom make.
Sekarang, kita dapat melakukan join, cara standar untuk menggabungkan dataset ke dalam satu tabel.
Jenis-jenis Join
Ada banyak jenis join. Anda dapat mempelajari cara menambah kolom dari satu dataset dengan kolom dari dataset lain dengan mutating join, cara memfilter satu dataset terhadap dataset lain dengan filtering join, dan cara menyaring dataset dengan operasi himpunan di kursus Joining Data in R with dplyr. Di bawah ini adalah beberapa yang paling umum.
left_join(x, y): mengembalikan semua baris dari x, dan semua kolom dari x dan y. Baris di x yang tidak memiliki pasangan di y akan berisi nilai NA pada kolom baru. Jika ada beberapa pasangan yang cocok antara x dan y, semua kombinasi pasangan tersebut akan dikembalikan.
inner_join(x, y): mengembalikan semua baris dari x yang memiliki nilai yang cocok di y, dan semua kolom dari x dan y. Jika ada beberapa pasangan yang cocok antara x dan y, semua kombinasi pasangan tersebut akan dikembalikan.
full_join(x, y): mengembalikan semua baris dan semua kolom dari x dan y. Jika tidak ada nilai yang cocok, fungsi akan mengembalikan NA untuk yang hilang.
Join yang disebutkan di atas adalah contoh mutating join karena menggabungkan variabel dari dua dataset.
Kunci yang Hilang
Misalkan Anda memiliki dua dataset. Dataset pertama bernama size dan memuat nama orang serta ukuran kaus mereka:
> size
name size
1 Tom M
2 Dan XL
3 Keil S
Dataset kedua bernama color dan memuat nama keluarga orang tersebut, preferensi warna kaus, serta menyimpan sebagian informasi di atribut row.names:
> color
surname color
Tom Jeon <NA>
Dan Smith Dark
Bob McLadden Light
Perhatikan apa yang bisa salah di sini? Join dua tabel bisa menjadi rumit ketika ada kunci yang hilang atau kunci duplikat. Pada contoh ini, data frame R menyimpan informasi penting di atribut row.names. Dalam kasus seperti ini, Anda tidak akan dapat mengakses kunci dengan fungsi join, karena fungsi join hanya dapat mengakses kolom dari data frame.
Cara mudah untuk memperbaiki masalah ini adalah menggunakan fungsi rownames_to_column() dari paket tibble. Fungsi ini mengembalikan salinan dataset Anda dengan nama baris ditambahkan ke data sebagai sebuah kolom. Argumen pertama untuk rownames_to_column() adalah objek data frame Anda dan argumen kedua adalah string yang menentukan nama kolom yang ingin Anda tambahkan.
Cobalah bereksplorasi di konsol di bawah. Dataset size dan color sudah dimuat sebelumnya di ruang kerja Anda.
color <- data.frame(surname = c("Jeon", "Smith", "McLadden"), color = c(NA, "Dark", "Light"))
row.names(color) <- c("Tom", "Dan", "Bob")
size <- data.frame(name = c("Tom", "Dan", "Keil"), size = c("M", "XL", "S"))
# Explore here!
Penutup
Di dunia nyata, data bisa tersebar di banyak dataset dan berbagai format. Karena R dirancang untuk bekerja dengan tabel data tunggal, memanipulasi dan menggabungkan dataset menjadi satu tabel adalah keterampilan yang penting. Selesaikan jalur keahlian Importing & Cleaning Data with R dan pelajari cara mengurai serta menggabungkan data dalam format apa pun. Lihat juga tutorial R Data Import dari DataCamp. Selamat belajar!
