0Pricing
R Academy · Ders

dplyr'da Çok Tablolu Birleştirmeler

inner_join, left_join, right_join, full_join ve anti_join işlevlerinde uzmanlaşın.

dplyr'da Çok Tablolu Birleştirmeler, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

Tablolar Neden Birleştirilir?

Gerçek veriler nadiren tek bir tabloda bulunur. İlişkisel veritabanları, tekrarı önlemek için bilgileri birden çok tabloya böler. Birleştirmeler, tabloları ortak anahtarlara göre birleştirmenizi sağlar. dplyr, anlaşılır ve okunabilir bir söz dizimiyle SQL tarzı birleştirme işlevleri sunar.

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() — Yalnızca Eşleşen Satırlar

inner_join(x, y, by='key'), anahtarın her iki tabloda da bulunduğu satırları döndürür. Diğer tabloda eşleşmesi olmayan satırlar kaldırılır. Bu, en yaygın birleştirme türüdür.

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() — Soldaki Tüm Satırları Koruma

left_join(x, y, by='key'), x'teki tüm satırları korur ve y'den eşleşen verileri ekler. y'de eşleşmesi olmayan x satırlarının y sütunlarına NA yazılır. Sonucu sol tablo belirler.

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() — Sağdaki Tüm Satırları Koruma

right_join(x, y, by='key'), y'deki tüm satırları korur. x'te eşleşmesi olmayan y satırlarının x sütunlarına NA yazılır. Bu, left_join() işlevinin tersidir — tablo sırasını değiştirebildiğiniz için daha az kullanılır.

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() — Tüm Satırları Koruma

full_join(x, y, by='key'), her iki tablodaki tüm satırları korur. Her iki taraftaki eşleşmeyen satırların diğer tablonun sütunlarına NA yazılır. Hiçbir veriyi kaybetmeyi göze alamadığınızda kullanın.

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() — Eşleşmeyenleri Bulma

anti_join(x, y, by='key'), y'de eşleşmesi olmayan x satırlarını döndürür. y'deki hiçbir sütun dahil edilmez. Yetim kayıtları, eşleşmeyen siparişleri veya bir başvuru tablosunda eksik olan öğeleri bulmak için idealdir.

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() — Eşleşmeye Göre Filtreleme

semi_join(x, y, by='key'), y'de eşleşmesi olan x satırlarını döndürür; ancak y'nin sütunlarını eklemez. inner_join() gibidir, fakat yalnızca x'in sütunlarını döndürür — filtreleme adımı olarak kullanışlıdır.

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')

Farklı Sütun Adlarına Göre Birleştirme

Anahtar sütunlarının x ve y'de farklı adları varsa by = c('x_col' = 'y_col') söz dizimini kullanın. Bu söz dizimi, sol tablodaki sütun adını sağ tablodaki karşılık gelen sütunla eşleştirir.

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'))

Birden Çok Anahtara Göre Birleştirme

by bağımsız değişkenine bir vektör vererek birden çok sütuna göre birleştirme yapabilirsiniz. Bir satırın birleştirilmesi için belirtilen tüm sütunların eşleşmesi gerekir. Bu, tek bir sütunun benzersiz olmadığı bileşik anahtarları ele alır.

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'))

Birden Çok Birleştirmeyi Zincirleme

Boru işleciyle tek bir işlem hattında birden çok birleştirmeyi zincirleyebilirsiniz. Birkaç arama tablosundan bilgileri her adımda birer birer ekleyerek normalleştirilmemiş bir görünüm oluşturun.

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')

Yinelenen Sütunları Ele Alma

Her iki tabloda da birleştirme anahtarı dışında aynı ada sahip sütunlar varsa dplyr, .x ve .y son eklerini ekler. Bunları suffix bağımsız değişkeniyle özelleştirebilir, ardından gerektiği gibi seçebilir veya yeniden adlandırabilirsiniz.

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))

Hızlı Kontrol

Hangi dplyr birleştirmesi, yalnızca sağ tabloda eşleşen satırı olmayan sol tablodaki satırları döndürür?

Özet: dplyr Birleştirmeleri

dplyr'da çok tablolu birleştirmeler için temel noktalar:

  • inner_join() — her iki tablodan yalnızca eşleşen satırlar
  • left_join() — soldaki tüm satırlar; sağda eşleşme yoksa NA
  • right_join() — sağdaki tüm satırlar; solda eşleşme yoksa NA
  • full_join() — her iki tablodaki tüm satırlar; eşleşme yoksa NA
  • anti_join() — y'de eşleşmesi OLMAYAN x satırları (filtreleme aracı)
  • semi_join() — y'de eşleşmesi OLAN x satırları (filtreleme aracı)
  • Farklı sütun adları için by = c('x_col' = 'y_col') kullanın
  • Bileşik anahtarlar için vektör kullanın: 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)

Sıkça Sorulan Sorular

“dplyr'da Çok Tablolu Birleştirmeler” dersi ücretsiz mi?

Evet — “dplyr'da Çok Tablolu Birleştirmeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“dplyr'da Çok Tablolu Birleştirmeler” dersinde ne öğreneceğim?

inner_join, left_join, right_join, full_join ve anti_join işlevlerinde uzmanlaşın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“dplyr'da Çok Tablolu Birleştirmeler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Gruplandırılmış Özetler ve group_by()
  2. Pencere İşlevleri: lag, lead, cumsum
  3. dplyr'da Çok Tablolu Birleştirmeler
  4. Düzenli Değerlendirme: {{ }} ve .data
← R Academy Sayfasına Dön