0Pricing
R Academy · Pelajaran

Join Banyak Tabel dalam dplyr

Kuasai inner_join, left_join, right_join, full_join, dan anti_join.

Join Banyak Tabel dalam dplyr adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.

Mengapa Menggabungkan Tabel?

Data nyata jarang tersimpan dalam satu tabel. Basis data relasional membagi informasi ke beberapa tabel untuk menghindari pengulangan. Penggabungan memungkinkan Anda menggabungkan tabel berdasarkan kunci yang sama. dplyr menyediakan fungsi penggabungan bergaya SQL dengan sintaks yang bersih dan mudah dibaca.

library(dplyr)

# Two related tables
orders <- data.frame(
  order_id = 1:4,
  customer_id = c(1, 2, 1, 3),
  amount = c(250, 180, 320, 90)
)

customers <- data.frame(
  customer_id = 1:3,
  name = c('Alice','Bob','Carol'),
  city = c('NYC','LA','Chicago')
)

print(orders)
print(customers)

inner_join() — Hanya Baris yang Cocok

inner_join(x, y, by='key') hanya mengembalikan baris ketika kuncinya ada di kedua tabel. Baris yang tidak memiliki kecocokan di tabel lain akan dihapus. Ini adalah jenis penggabungan yang paling umum.

library(dplyr)

orders <- data.frame(
  order_id = 1:4,
  customer_id = c(1, 2, 1, 99),
  amount = c(250, 180, 320, 90)
)

customers <- data.frame(
  customer_id = c(1, 2, 3),
  name = c('Alice','Bob','Carol')
)

# customer_id = 99 in orders has no match => dropped
# customer_id = 3 in customers has no match => dropped
inner_join(orders, customers, by = 'customer_id')

left_join() — Pertahankan Semua Baris Kiri

left_join(x, y, by='key') mempertahankan semua baris dari x dan mengisi data yang cocok dari y. Baris di x yang tidak memiliki kecocokan di y akan mendapatkan NA pada kolom y. Tabel kiri menentukan hasilnya.

library(dplyr)

orders <- data.frame(
  order_id = 1:4,
  customer_id = c(1, 2, 1, 99),
  amount = c(250, 180, 320, 90)
)

customers <- data.frame(
  customer_id = c(1, 2, 3),
  name = c('Alice','Bob','Carol')
)

# Order with customer_id=99 is kept, name = NA
left_join(orders, customers, by = 'customer_id')

right_join() — Pertahankan Semua Baris Kanan

right_join(x, y, by='key') mempertahankan semua baris dari y. Baris di y yang tidak memiliki kecocokan di x akan mendapatkan NA pada kolom x. Ini adalah kebalikan dari left_join() — lebih jarang digunakan karena Anda dapat menukar urutan tabel.

library(dplyr)

orders <- data.frame(
  order_id = c(1, 2),
  customer_id = c(1, 2),
  amount = c(250, 180)
)

customers <- data.frame(
  customer_id = c(1, 2, 3),
  name = c('Alice','Bob','Carol')
)

# Carol (customer_id=3) has no orders => NA for order columns
right_join(orders, customers, by = 'customer_id')

full_join() — Pertahankan Semua Baris

full_join(x, y, by='key') mempertahankan setiap baris dari kedua tabel. Baris yang tidak cocok dari salah satu sisi akan mendapatkan NA pada kolom tabel lainnya. Gunakan ini ketika Anda tidak boleh kehilangan data apa pun.

library(dplyr)

q1 <- data.frame(product = c('A','B','C'), q1_sales = c(100, 200, 150))
q2 <- data.frame(product = c('A','C','D'), q2_sales = c(120, 160, 90))

# D appears only in q2, B only in q1 => both kept
full_join(q1, q2, by = 'product')

anti_join() — Temukan Baris yang Tidak Cocok

anti_join(x, y, by='key') mengembalikan baris di x yang tidak memiliki kecocokan di y. Tidak ada kolom dari y yang disertakan. Fungsi ini sangat cocok untuk menemukan catatan yatim, pesanan yang tidak cocok, atau item yang tidak ada dalam tabel referensi.

library(dplyr)

all_employees <- data.frame(
  id = 1:5,
  name = c('Alice','Bob','Carol','Dave','Eve')
)

trained <- data.frame(id = c(1, 3, 5))

# Who has NOT completed training?
anti_join(all_employees, trained, by = 'id')

semi_join() — Saring Berdasarkan Kecocokan

semi_join(x, y, by='key') mengembalikan baris di x yang memiliki kecocokan di y, tetapi TIDAK menambahkan kolom y. Fungsinya seperti inner_join(), tetapi hanya mengembalikan kolom x — berguna sebagai langkah penyaringan.

library(dplyr)

products <- data.frame(
  id = 1:5,
  name = c('Widget','Gadget','Donut','Gizmo','Sprocket'),
  price = c(9.99, 24.99, 1.99, 14.99, 4.99)
)

ordered_products <- data.frame(id = c(1, 3, 5))

# Products that appear in at least one order
semi_join(products, ordered_products, by = 'id')

Menggabungkan dengan Nama Kolom yang Berbeda

Ketika kolom kunci memiliki nama yang berbeda di x dan y, gunakan sintaks by = c('x_col' = 'y_col'). Sintaks ini memetakan nama kolom di tabel kiri ke nama kolom yang sesuai di tabel kanan.

library(dplyr)

orders <- data.frame(
  order_id = 1:3,
  user_id = c(10, 20, 10),
  amount = c(100, 200, 150)
)

users <- data.frame(
  id = c(10, 20, 30),
  username = c('alice','bob','carol')
)

# orders.user_id matches users.id
left_join(orders, users, by = c('user_id' = 'id'))

Menggabungkan Berdasarkan Beberapa Kunci

Anda dapat menggabungkan berdasarkan beberapa kolom dengan meneruskan vektor ke by. Semua kolom yang ditentukan harus cocok agar suatu baris dapat digabungkan. Ini menangani kunci gabungan ketika tidak ada satu kolom pun yang unik.

library(dplyr)

actual <- data.frame(
  year = c(2023, 2023, 2024, 2024),
  quarter = c('Q1','Q2','Q1','Q2'),
  sales = c(100, 120, 130, 150)
)

target <- data.frame(
  year = c(2023, 2023, 2024, 2024),
  quarter = c('Q1','Q2','Q1','Q2'),
  target = c(110, 115, 125, 145)
)

inner_join(actual, target, by = c('year', 'quarter'))

Merangkai Beberapa Penggabungan

Anda dapat merangkai beberapa penggabungan dalam satu pipeline menggunakan operator pipe. Bangun tampilan yang didenormalisasi dengan menambahkan informasi dari beberapa tabel pencarian, satu langkah demi satu langkah.

library(dplyr)

orders <- data.frame(order_id=1:3, cust_id=c(1,2,1), prod_id=c(10,10,20))
customers <- data.frame(cust_id=1:2, name=c('Alice','Bob'))
products <- data.frame(prod_id=c(10,20), product=c('Widget','Gadget'))

orders %>%
  left_join(customers, by = 'cust_id') %>%
  left_join(products, by = 'prod_id')

Menangani Kolom Duplikat

Ketika kedua tabel memiliki kolom dengan nama yang sama (selain kunci penggabungan), dplyr menambahkan akhiran .x dan .y. Anda dapat menyesuaikannya dengan argumen suffix, lalu memilih atau mengganti nama kolom sesuai kebutuhan.

library(dplyr)

current <- data.frame(id=1:3, value=c(10,20,30), date=Sys.Date())
historic <- data.frame(id=1:3, value=c(8,22,28), date=Sys.Date()-365)

# Both have 'value' and 'date' columns
result <- inner_join(current, historic, by='id',
                     suffix=c('_current','_historic'))
print(names(result))

Pemeriksaan Cepat

Penggabungan dplyr mana yang hanya mengembalikan baris dari tabel kiri yang tidak memiliki baris yang cocok di tabel kanan?

Ringkasan: Penggabungan dplyr

Hal-hal penting tentang penggabungan beberapa tabel di dplyr:

  • inner_join() — hanya baris yang cocok dari kedua tabel
  • left_join() — semua baris dari kiri; NA jika tidak ada kecocokan di kanan
  • right_join() — semua baris dari kanan; NA jika tidak ada kecocokan di kiri
  • full_join() — semua baris dari kedua tabel; NA jika tidak ada kecocokan
  • anti_join() — baris di x yang TIDAK memiliki kecocokan di y (alat penyaringan)
  • semi_join() — baris di x yang memiliki kecocokan di y (alat penyaringan)
  • Gunakan by = c('x_col' = 'y_col') untuk nama kolom yang berbeda
  • Gunakan vektor untuk kunci gabungan: by = c('year', 'quarter')
library(dplyr)

# Chain of joins: the typical real-world pattern
orders <- data.frame(oid=1:3, cid=c(1,2,1), pid=c(10,20,10))
customers <- data.frame(cid=1:2, name=c('Alice','Bob'))
products <- data.frame(pid=c(10,20), name=c('Widget','Gadget'), price=c(9.99,19.99))

orders %>%
  inner_join(customers, by='cid') %>%
  inner_join(products, by='pid', suffix=c('','_product')) %>%
  select(oid, name, name_product, price)

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Join Banyak Tabel dalam dplyr” gratis?

Ya — teks lengkap “Join Banyak Tabel dalam dplyr” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Join Banyak Tabel dalam dplyr”?

Kuasai inner_join, left_join, right_join, full_join, dan anti_join. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai R Academy?

Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Join Banyak Tabel dalam dplyr” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Ringkasan Berkelompok dan group_by()
  2. Fungsi Jendela: lag, lead, cumsum
  3. Join Banyak Tabel dalam dplyr
  4. Evaluasi Rapi: {{ }} dan .data
← Kembali ke R Academy