Ana içeriğe atla

Bir data.table R Eğitimi: DT[i, j, by]’a Giriş

Ücretsiz data.table R eğitimi, R için data.table paketinin temellerini ve sözdizimini açıklar. data.table sözdizimine şimdi hakim olun.
Güncel 3 Eki 2026  · 10 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Bu data.table R eğitimi, data.table paketinin çekirdeğinde yer alan DT[i, j, by] komutunun temelini açıklar. data.table paketi hakkında daha fazla bilgi edinmek isterseniz, DataCamp data.table paketi üzerine etkileşimli bir R kursu sunar. Kursta tarayıcınızın konforunda gerçekleştireceğiniz 35’ten fazla etkileşimli R alıştırması ve data.table paketinin ana yazarı Matt Dowle ile büyük katkı sağlayan Arun Srinivasan’ın yer aldığı birkaç video bulunur. Ücretsiz deneyin.

DataCamp’ten bir data.table R eğitimi

Daha önce RAM’de büyük veri kümeleriyle (1 GB’tan 100+ GB’a kadar) çalıştıysanız, bir data.frame’in sınırlayıcı olabileceğini biliyorsunuzdur: Bazı işlemler için gereken süre fazlasıyla uzundur. Data.table bunu hesaplama süresini azaltarak çözer. Dahası, daha az yazmayla daha fazlasını yapmayı da kolaylaştırır. Bu data.table R eğitiminden data.table sözdizimini öğrendiğinizde, karmaşık işlemleri yapmanın ne kadar basit olduğuna şaşıracaksınız. Böylece yalnızca hesaplama süresini değil, programlama süresini de kısaltacaksınız.

DT[i,j,by] komutu üç bölümden oluşur: i, j ve by. SQL terminolojisiyle düşünürseniz, i WHERE’a, j SELECT’e ve by GROUP BY’a karşılık gelir. Komutu şöyle ifade ederiz: “DT’yi alın, satırları ‘i’ ile altkümeye ayırın, ardından ‘by’ ile gruplayarak ‘j’yi hesaplayın.” Basit bir örnekte ve hflights veri setini kullanarak (tüm örnekleri siz de üretebilin diye) şu sonuç elde edilir:

library(hflights)
library(data.table)
DT <- as.data.table(hflights)
DT[Month==10,mean(na.omit(AirTime)), by=UniqueCarrier]
UniqueCarrier V1
AA            68.76471
AS            255.29032
B6            176.93548
CO            141.52861
... 

Burada, yalnızca yılın 10. ayına ait satırları tutacak şekilde veri tablosunu altkümeye ayırdık, gerçekten uçan uçakların ortalama AirTime değerini hesapladık (na.omit() bu yüzden kullanılıyor; iptal edilen uçuşların AirTime için bir değeri yok) ve sonuçları taşıyıcılarına göre grupladık. Örneğin AA (American Airlines) için ortalama AirTime’ın AS’ye (Alaska Airlines) kıyasla çok daha kısa olduğunu görebiliriz. Ayrıca R’ın temel fonksiyonlarının j bölümünde kullanılabildiğini de fark ettiniz mi? Buna birazdan geleceğiz.

i Bölümü

‘i’ bölümü, tıpkı bir data frame’de olduğu gibi satır altkümeye alma için kullanılır.

DT[2:5]
 #selects the second to the fifth row of DT
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime AirTime
2011 1     2          7         1401    1501    AA            428       N557AA  60                45
2011 1     3          1         1352    1502    AA            428       N541AA  70                48
2011 1     4          2         1403    1513    AA            428       N403AA  70                39
2011 1     5          3         1405    1507    AA            428       N492AA  62                44

ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
-9       1        IAH    DFW  224      6      9       0                          0
-8      -8        IAH    DFW  224      5      17      0                          0
 3       3        IAH    DFW  224      9      22      0                          0
-3       5        IAH    DFW  224      9      9       0                          0

Ama sütun adlarını da kullanabilirsiniz; çünkü bunlar DT’nin kapsamı içinde değerlendirilir.

DT[UniqueCarrier=="AA"]
#Returns all those rows where the Carrier is American Airlines
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime
2011 1     1          6         1400    1500    AA            428       N576AA  60
2011 1     2          7         1401    1501    AA            428       N557AA  60
2011 1     3          1         1352    1502    AA            428       N541AA  70
2011 1     4          2         1403    1513    AA            428       N403AA  70
2011 1     5          3         1405    1507    AA            428       N492AA  62
---
2011 12    27         2         1021    1333    AA            2234      N3ETAA  132
2011 12    28         3         1015    1329    AA            2234      N3FJAA  134
2011 12    29         4         1023    1335    AA            2234      N3GSAA  132
2011 12    30         5         1024    1334    AA            2234      N3BAAA  130
2011 12    31         6         1024    1343    AA            2234      N3HNAA  139
AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
40      -10       0       IAH    DFW  224       7     13      0                          0
45       -9       1       IAH    DFW  224       6      9      0                          0
48       -8      -8       IAH    DFW  224       5     17      0                          0
39        3       3       IAH    DFW  224       9     22      0                          0
44       -3       5       IAH    DFW  224       9      9      0                          0
---
112     -12       1       IAH    MIA  964       8     12      0                          0
112     -16      -5       IAH    MIA  964       9     13      0                          0
110     -10       3       IAH    MIA  964      12     10      0                          0
110     -11       4       IAH    MIA  964       9     11      0                          0
119      -2       4       IAH    MIA  964       8     12      0                          0 

Bir data table’da satır altkümeye almak için virgül kullanmak zorunda olmadığınıza dikkat edin. Bir data.frame’de DF[2:5] yapmak 2. ile 5. sütun arasındaki tüm sütunların satırlarını verirdi. Bunun yerine (bunu okuyan herkesin bildiği gibi) DF[2:5,] belirtmemiz gerekir. Ayrıca DT[,2:5] ifadesinin data table’lar için bir anlamı olmadığını, data.table paketinin SSS belgesinin ilk sorusunda açıklandığını da unutmayın.

İlginç ve kullanışlı: Satır altkümeye alırken, DT[…] komutunda satır sayısını ya da son satırı ifade eden .N sembolünü de kullanabilirsiniz. Bunu son satırı veya ondan bir ofseti seçmek için kullanabilirsiniz.

DT[.N-1]
#Returns the penultimate row of DT
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime AirTime
2011 12    6          2         656     812     WN            621       N727SW  76                64
ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
-13      -4       HOU    TUL  453      3      9       0                          0 

j Bölümü

‘j’ bölümü, sütunları seçmek ve onlarla bir şeyler yapmak için kullanılır. Ve bir şeyler gerçekten her şey olabilir. Her tür fonksiyon kullanılabilir; bu da data.table paketinin güçlü bir yönüdür.

DT[, mean(na.omit(ArrDelay))] 
[1] 7.094334

‘i’ bölümünün boş bırakıldığına ve parantez içindeki ilk şeyin bir virgül olduğuna dikkat edin. Bu ilk başta sezgisel gelmeyebilir. Ancak bu, satırlarda herhangi bir altkümeye alma yapmadığımız, yani tüm satırların seçildiği anlamına gelir. ‘j’ bölümünde, tüm uçuşların ortalama varış gecikmesi hesaplanır. Görünüşe göre hflights veri setindeki ortalama uçak 7 dakikadan fazla gecikmiş. Bir sonraki uçuşunuza yetişirken hazırlıklı olun!

‘j’ bölümünde birden fazla sütun seçip onlarla bir şeyler yaptığınızda, ‘.()’ gösterimini kullanmanız gerekir. Bu gösterim aslında ‘list()’ için bir takma addır. ‘.()’ kullanmak bir data table döndürür; yukarıda görüldüğü gibi kullanmamak ise yalnızca bir vektör döndürür.

DT[, .(mean(na.omit(DepDelay)), mean(na.omit(ArrDelay)))] 
V1       V2
9.444951 7.094334

‘.()’ gösterimini gerektiren bir başka kullanışlı özellik, sütunları DT[…] komutunun içinde yeniden adlandırmanıza olanak tanır.

DT[, .(Avg_ArrDelay =
mean(na.omit(ArrDelay)))]
Avg_ArrDelay
7.094334
DT[, .(Avg_DepDelay = mean(na.omit(DepDelay)),
avg_ArrDelay = mean(na.omit(ArrDelay)))] 
Avg_DepDelay Avg_ArrDelay
9.444951     7.094334

Elbette, yeni sütun adları zorunlu değildir.

Yukarıdaki ‘i’ ve ‘j’ ile ilgili olanları birleştirirsek şunu elde ederiz:

DT[UniqueCarrier=="AA", .(Avg_DepDelay =
mean(na.omit(DepDelay)),
Avg_ArrDelay = mean(na.omit(ArrDelay)),
plot(DepTime,DepDelay,ylim=c(-15,200)),
abline(h=0))]
Avg_DepDelay Avg_ArrDelay V3    V4
6.390144     0.8917558    NULL  NULL

DepDelay DepTime grafiği

Burada DT’yi aldık, ‘i’ bölümünde taşıyıcının AA olduğu tüm satırları seçtik, kalkış ve varıştaki ortalama gecikmeyi hesapladık ve ‘j’ bölümünde kalkış saatine karşı kalkış gecikmesini çizdirdik.

Özetle, ‘j’ bölümü o bölümde belirtilen sütunlar üzerinde hesaplamalar yapmak için kullanılır. Bir data table’ın sütunları değişken olarak görüldüğünden ve ‘j’ parçaları ifade olarak değerlendirildiğinden, ‘j’ bölümünde neredeyse her şey yapılabilir. Bu da programlama sürenizi kayda değer biçimde kısaltır.

by Bölümü

Bu data.table R eğitiminin son bölümü ‘by’ kısmına odaklanır. ‘by’ bölümü, ‘j’ bölümünü belirli bir değişken (ya da o değişkenin bir dönüşümü) bazında gruplamak istediğimizde kullanılır. ‘j’ ifadesinin her bir ‘by’ grubu için tekrarlandığını göreceksiniz. Kullanımı basittir: ‘by’ argümanında gruplayacağınız sütunu belirtirsiniz.

DT[,mean(na.omit(DepDelay)),by=Origin] 
Origin  V1
IAH     8.436951
HOU    12.837873 

Burada, kalkıştan önceki ortalama gecikmeyi hesapladık, ancak bunu uçağın kalktığı yere göre gruplayarak yaptık. Görünüşe göre HOU’dan kalkan uçuşların ortalama gecikmesi IAH’tan kalkanlara kıyasla daha fazla.

‘j’ bölümünde olduğu gibi, ‘by’ bölümünde de pek çok şey yapabilirsiniz. ‘by’ bölümünde fonksiyonlar kullanılabilir; böylece ‘j’ bölümünde yaptığımız işlemlerin sonuçları, DT[…] komutunun içinde belirttiğimiz bir şeye göre gruplanır. DT[…] içinde fonksiyon kullanmak, o tek satırı oldukça güçlü kılar. Benzer şekilde, ‘by’ bölümünde birden fazla sütun kullanırken ‘.()’ gösterimini kullanmak gerekir.

DT[,.(Avg_DepDelay_byWeekdays = mean(na.omit(DepDelay))), by=.(Origin,Weekdays = DayOfWeek<6)] 
Origin Weekdays Avg_DepDelay_byWeekdays
IAH    FALSE     8.286543
IAH    TRUE      8.492484
HOU    FALSE    10.965384
HOU    TRUE     13.433994

Burada, tüm uçakların kalkıştan önceki ortalama gecikmesi (‘i’ bölümünde altkümeye alma yok, yani tüm satırlar seçili) önce hesaplandı, ardından önce uçağın kalktığı yere sonra da haftanın gününe göre gruplandı. Hafta içi, hafta sonlarında False olur. Görünüşe göre kalkıştan önceki ortalama gecikme HOU’dan kalkışlarda IAH’a kıyasla daha yüksek ve şaşırtıcı biçimde hafta sonlarında gecikmeler daha düşük.

Hepsini bir araya getirirsek, tipik bir DT[i,j,by] komutu şunu verir:

DT[UniqueCarrier=="DL", .(Avg_DepDelay =
mean(na.omit(DepDelay)),
Avg_ArrDelay = mean(na.omit(ArrDelay)),
Compensation = mean(na.omit(ArrDelay - DepDelay))), by = .(Origin, Weekdays = DayOfWeek<6)]
Origin Weekdays Avg_DepDelay Avg_ArrDelay Compensation
IAH    FALSE     8.979730     4.116751    -4.825719
HOU    FALSE     7.120000     2.656566    -4.555556
IAH    TRUE      9.270948     6.281941    -2.836609
HOU    TRUE     11.631387    10.406593    -1.278388

Burada Delta Air Lines tarafından işletilen uçakların altkümesi (‘i’ içinde seçilen) kalkış yerine ve hafta içine göre (‘by’ içinde) gruplandı. Havada telafi edilen süre de (‘j’ içinde) hesaplandı. Görünüşe göre hafta sonlarında, uçak IAH’tan mı yoksa HOU’dan mı kalkmış olursa olsun, havadayken telafi edilen süre (yani daha hızlı uçarak) daha büyük.

Data table paketinde keşfedilecek çok daha fazla şey var; ancak bu yazı temel DT[i,j,by] komutunu gözden geçirdi. DataCamp kursu tüm data table paketini kapsamlı biçimde açıklar. İpuçları ve geri bildirim alarak alıştırmaları tarayıcınızda kendi temponuzda yapabilir, videoları ve slaytları dilediğiniz kadar tekrar edebilirsiniz. Bu etkileşimli öğrenme yolu, data table’lar konusunda derin bilgi ve pratik deneyim kazanmanızı sağlar. Ücretsiz deneyin. DataCamp’in data.table R Paketi Cheat Sheet’ine göz atın.

Umarız bu data.table R eğitimi sayesinde data.table’ın temel sözdizimini artık anlıyorsunuz ve kendi başınıza denemeye hazırsınız. data.table paketiyle ilgili sorularınız varsa buraya bakın. Matt ve Arun çok aktiftir. data.table paketiyle ilgili bir sonraki blog yazılarından biri daha teknik olacak ve data table’ların geniş olanaklarına yakından bakacak. Takipte kalın!

Konular
R

R hakkında daha fazlasını öğrenin

Kurs

R'de data.table ile Veri İşleme

4 sa
26.5K
data.table kullanarak filtreleme, seçim ve grup bazında istatistik hesaplama gibi veri işlemeyle ilgili temel kavramları öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör