Menggabungkan Data dengan dplyr
Pelajaran 8 dari 14 dalam kursus Manipulasi Data dengan R di Coddy.
Menggabungkan data adalah operasi penting dalam manipulasi data, yang memungkinkan kamu menggabungkan beberapa data frame berdasarkan kolom yang sama. Package dplyr di R menyediakan fungsi yang efisien untuk berbagai jenis penggabungan. Mari kita pelajari operasi penggabungan utama: inner join, left join, right join, dan full join.
1. Menyiapkan Data
Pertama, mari kita buat dua data frame contoh untuk menunjukkan operasi penggabungan:
# Muat dplyr
library(dplyr)
# Buat data frame contoh
employees <- data.frame(
emp_id = c(1, 2, 3, 4),
name = c("Alice", "Bob", "Charlie", "David"),
department = c("HR", "IT", "Finance", "IT")
)
salaries <- data.frame(
emp_id = c(1, 2, 3, 5),
salary = c(50000, 60000, 55000, 65000)
)2. Inner Join
Inner join hanya mengembalikan baris yang memiliki nilai yang cocok di kedua data frame:
inner_join_result <- inner_join(employees, salaries, by = "emp_id")
print(inner_join_result)Output:
emp_id name department salary
1 1 Alice HR 50000
2 2 Bob IT 60000
3 3 Charlie Finance 550003. Left Join
Left join mengembalikan semua baris dari data frame kiri dan baris yang cocok dari data frame kanan:
left_join_result <- left_join(employees, salaries, by = "emp_id")
print(left_join_result)Output:
emp_id name department salary
1 1 Alice HR 50000
2 2 Bob IT 60000
3 3 Charlie Finance 55000
4 4 David IT NA4. Right Join
Right join mengembalikan semua baris dari data frame kanan dan baris yang cocok dari data frame kiri:
right_join_result <- right_join(employees, salaries, by = "emp_id")
print(right_join_result)Output:
emp_id name department salary
1 1 Alice HR 50000
2 2 Bob IT 60000
3 3 Charlie Finance 55000
4 5 <NA> <NA> 650005. Full Join
Full join mengembalikan semua baris jika ada kecocokan di data frame kiri atau kanan:
full_join_result <- full_join(employees, salaries, by = "emp_id")
print(full_join_result)Output:
emp_id name department salary
1 1 Alice HR 50000
2 2 Bob IT 60000
3 3 Charlie Finance 55000
4 4 David IT NA
5 5 <NA> <NA> 650006. Menentukan Kolom Penggabungan
Jika nama kolom di kedua data frame berbeda, kamu dapat menentukan kolom penggabungan secara eksplisit:
# Dengan asumsi 'salaries' memiliki 'employee_id', bukan 'emp_id'
salaries_alt <- salaries %>% rename(employee_id = emp_id)
join_result <- inner_join(employees, salaries_alt, by = c("emp_id" = "employee_id"))
print(join_result)7. Menambahkan Kolom Baru
Menambahkan atau Mengubah Kolom dengan mutate() Fungsi mutate() di dplyr memungkinkan kamu menambahkan kolom baru atau mengubah kolom yang sudah ada dalam data frame. Fungsi ini sering digunakan setelah operasi penggabungan untuk melakukan perhitungan atau transformasi pada data yang telah digabungkan:
Penggunaan dasar:
result <- data_frame %>% mutate(new_column = calculation)Contoh:
# Tambahkan kolom bonus ke data yang sudah digabungkan
result_with_bonus <- inner_join(employees, salaries, by = "emp_id") %>%
mutate(bonus = salary * 0.1)Kamu juga dapat menggunakan mutate() untuk melakukan perhitungan yang lebih kompleks atau menggunakan logika percabangan:
# Tambahkan kategori kinerja berdasarkan gaji
result_with_category <- inner_join(employees, salaries, by = "emp_id") %>%
mutate(performance_category = ifelse(salary < 55000, "Needs Improvement",
ifelse(salary < 60000, "Meets Expectations",
"Exceeds Expectations")))Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Tantangan
MudahBuat fungsi yang melakukan serangkaian operasi join pada dua data frame yang berisi informasi tentang buku dan ratingnya. Fungsi tersebut harus:
- Melakukan inner join untuk menggabungkan buku dengan ratingnya
- Melakukan left join untuk menyertakan semua buku, termasuk buku yang tidak memiliki rating
- Melakukan right join untuk menyertakan semua rating, termasuk rating untuk buku yang tidak ada dalam daftar buku
- Melakukan full join untuk menyertakan semua buku dan semua rating
- Untuk setiap hasil join, menghitung dan menambahkan kolom untuk jumlah rating
- Mengembalikan list yang berisi keempat hasil join
Coba sendiri
# Baca semua baris input
con <- file("stdin", "r")
all_lines <- suppressWarnings(readLines(con))
# Temukan indeks tempat data frame kedua dimulai
separator_index <- which(grepl("^book_id,rating,user_id", all_lines))
# Bagi input menjadi dua bagian
books_data <- all_lines[1:(separator_index - 1)]
ratings_data <- all_lines[separator_index:length(all_lines)]
# Muat library yang diperlukan
suppressPackageStartupMessages(library(dplyr))
# Ubah input string menjadi data frame
books <- read.csv(text = paste(books_data, collapse = "\n"), stringsAsFactors = FALSE)
ratings <- read.csv(text = paste(ratings_data, collapse = "\n"), stringsAsFactors = FALSE)
# TODO: Tulis kodemu di bawah ini
# Lakukan operasi join dan perhitungan yang diperlukan
# Fungsi untuk melakukan operasi join
perform_joins <- function(books, ratings) {
# Tulis kodemu di sini
# Kembalikan list yang berisi keempat hasil join
list(
inner_join = NULL,
left_join = NULL,
right_join = NULL,
full_join = NULL
)
}
# Panggil fungsi dan simpan hasilnya
results <- perform_joins(books, ratings)
# Cetak hasilnya
print(results)Semua pelajaran di Manipulasi Data dengan R
Latihan sendiri: Compiler R online