Lewati ke konten utama

Tutorial R data.table: Pengantar DT[i, j, by]

Tutorial R data.table gratis ini menjelaskan dasar-dasar dan sintaks paket data.table untuk R. Kuasai sintaks data.table sekarang.
Diperbarui 28 Sep 2026  · 10 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Tutorial R data.table ini menjelaskan dasar-dasar perintah DT[i, j, by] yang merupakan inti dari paket data.table. Jika Anda ingin mempelajari lebih lanjut tentang paket data.table, DataCamp menyediakan kursus R interaktif tentang paket data.table. Kursus ini memiliki lebih dari 35 latihan R interaktif — semuanya berlangsung langsung di peramban Anda — dan beberapa video bersama Matt Dowle, penulis utama paket data.table, dan Arun Srinivasan, kontributor utama. Coba gratis.

Tutorial R data.table oleh DataCamp

Jika Anda pernah bekerja dengan dataset besar di RAM (1 hingga lebih dari 100GB), Anda tahu bahwa data.frame bisa menjadi pembatas: waktu yang dibutuhkan untuk melakukan hal-hal tertentu terlalu lama. Data.table menyelesaikannya untuk Anda dengan mengurangi waktu komputasi. Lebih dari itu, paket ini juga memudahkan Anda melakukan lebih banyak hal dengan pengetikan yang lebih sedikit. Setelah Anda menguasai sintaks data.table dari tutorial R data.table ini, kesederhanaan dalam melakukan operasi yang rumit akan mengejutkan Anda. Jadi Anda tidak hanya mengurangi waktu komputasi, tetapi juga waktu pemrograman.

Perintah DT[i,j,by] memiliki tiga bagian: i, j dan by. Jika menggunakan terminologi SQL, i setara dengan WHERE, j dengan SELECT dan by dengan GROUP BY. Kita menjelaskan perintah ini dengan mengatakan “Ambil DT, subset baris menggunakan ‘i’, lalu hitung ‘j’ dikelompokkan menurut ‘by’”. Jadi dalam contoh sederhana dengan menggunakan dataset hflights (agar Anda dapat mereproduksi semua contoh) hasilnya:

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

Di sini kita melakukan subset pada data table untuk menyisakan hanya baris pada bulan ke-10, menghitung rata-rata AirTime dari pesawat yang benar-benar terbang (itulah mengapa na.omit() digunakan, penerbangan yang dibatalkan tidak memiliki nilai AirTime) lalu mengelompokkan hasilnya berdasarkan maskapai. Kita dapat melihat misalnya bahwa AA (American Airlines) memiliki rata-rata AirTime yang sangat singkat dibandingkan AS (Alaska Airlines). Perhatikan juga bahwa fungsi-fungsi dasar R dapat digunakan di bagian j. Kita akan membahasnya nanti.

Bagian i

Bagian ‘i’ digunakan untuk melakukan subset pada baris, seperti pada data frame.

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

Namun Anda juga dapat menggunakan nama kolom, karena dievaluasi dalam cakupan DT.

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 

Perhatikan bahwa Anda tidak perlu menggunakan koma untuk subset baris pada data table. Pada data.frame, melakukan DF[2:5] akan menghasilkan semua baris dari kolom ke-2 hingga ke-5. Alih-alih itu (seperti semua orang yang membaca ini tentu tahu), kita harus menuliskan DF[2:5,]. Juga perhatikan bahwa DT[,2:5] tidak bermakna untuk data table, seperti dijelaskan pada pertanyaan pertama di FAQ paket data.table.

Unik dan berguna: saat melakukan subset baris Anda juga dapat menggunakan simbol .N dalam perintah DT[…], yang merupakan jumlah baris atau baris terakhir. Anda dapat menggunakannya untuk memilih baris terakhir atau offset darinya.

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 

Bagian j

Bagian ‘j’ digunakan untuk memilih kolom dan melakukan berbagai hal dengannya. Dan berbagai hal benar-benar bisa berarti apa saja. Berbagai fungsi dapat digunakan, yang merupakan kekuatan paket data.table.

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

Perhatikan bahwa bagian 'i' dibiarkan kosong, dan hal pertama di dalam tanda kurung siku adalah koma. Ini mungkin terasa tidak intuitif pada awalnya. Namun, ini hanya berarti kita tidak melakukan subset pada baris mana pun, jadi semua baris dipilih. Pada bagian 'j', rata-rata keterlambatan saat kedatangan untuk semua penerbangan dihitung. Tampaknya rata-rata pesawat dalam dataset hflights memiliki keterlambatan lebih dari 7 menit. Bersiaplah saat Anda mengejar penerbangan berikutnya!

Saat memilih beberapa kolom dan melakukan berbagai hal pada bagian 'j', Anda perlu menggunakan notasi ‘.()’. Notasi ini sebenarnya hanya alias untuk ‘list()’. Notasi ini mengembalikan data table, sedangkan tidak menggunakan ‘.()’ hanya mengembalikan vektor, seperti ditunjukkan di atas.

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

Fitur berguna lain yang memerlukan notasi ‘.()’ memungkinkan Anda mengganti nama kolom di dalam perintah DT[…].

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

Tentu, nama kolom baru tidak wajib.

Mengombinasikan penjelasan tentang ‘i’ dan ‘j’ di atas menghasilkan:

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

Grafik DepDelay DepTime

Di sini kita mengambil DT, memilih semua baris di mana maskapainya AA pada bagian 'i', menghitung rata-rata keterlambatan saat keberangkatan dan kedatangan, serta memplot waktu keberangkatan terhadap keterlambatan saat keberangkatan pada bagian 'j'.

Singkatnya, bagian ‘j’ digunakan untuk melakukan perhitungan pada kolom yang ditentukan pada bagian tersebut. Karena kolom-kolom pada data table diperlakukan sebagai variabel, dan bagian ‘j’ dievaluasi sebagai ekspresi, hampir apa pun dapat dilakukan di bagian ‘j’. Ini secara signifikan mempersingkat waktu pemrograman Anda.

Bagian by

Bagian terakhir dari tutorial R data.table ini berfokus pada bagian ‘by’. Bagian ‘by’ digunakan saat kita ingin menghitung bagian ‘j’ yang dikelompokkan menurut variabel tertentu (atau manipulasi atas variabel tersebut). Anda akan melihat bahwa ekspresi ‘j’ diulang untuk setiap grup 'by'. Cara menggunakannya sederhana: Anda cukup menentukan kolom yang ingin dijadikan pengelompokan di argumen 'by'.

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

Di sini, kita menghitung rata-rata keterlambatan sebelum keberangkatan, tetapi dikelompokkan berdasarkan asal pesawat. Tampaknya penerbangan yang berangkat dari HOU memiliki rata-rata keterlambatan lebih besar daripada yang berangkat dari IAH.

Sama seperti pada bagian 'j', Anda dapat melakukan banyak hal pada bagian 'by'. Fungsi dapat digunakan pada bagian 'by' sehingga hasil operasi yang dilakukan pada bagian 'j' dikelompokkan berdasarkan sesuatu yang kita tentukan di dalam perintah DT[…]. Menggunakan fungsi di dalam DT[…] membuat satu baris tersebut sangat kuat. Demikian pula, notasi ‘.()’ perlu digunakan saat menggunakan beberapa kolom pada bagian 'by'.

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

Di sini, rata-rata keterlambatan sebelum keberangkatan semua pesawat (tidak ada subset pada bagian 'i', sehingga semua baris dipilih) dihitung terlebih dahulu, lalu dikelompokkan, pertama berdasarkan asal pesawat dan kemudian berdasarkan hari kerja. Weekdays bernilai False pada akhir pekan. Tampaknya rata-rata keterlambatan sebelum keberangkatan lebih besar saat pesawat berangkat dari HOU daripada dari IAH, dan yang mengejutkan, keterlambatan lebih kecil pada akhir pekan.

Jika digabungkan, perintah DT[i,j,by] yang khas memberikan:

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

Di sini subset pesawat yang dioperasikan oleh Delta Air Lines (dipilih pada 'i') dikelompokkan berdasarkan asal dan berdasarkan Weekdays (pada 'by'). Waktu yang dikompensasi di udara juga dihitung (pada 'j'). Tampaknya pada akhir pekan, terlepas dari apakah pesawat berasal dari IAH atau HOU, waktu yang dikompensasi saat di udara (yakni dengan terbang lebih cepat) lebih besar.

Masih banyak yang bisa dijelajahi dalam paket data.table, tetapi tulisan ini menggambarkan perintah dasar DT[i,j,by]. Kursus DataCamp menjelaskan seluruh paket data.table secara mendalam. Anda dapat mengerjakan latihan sesuai kecepatan Anda di peramban sambil mendapatkan petunjuk dan umpan balik, serta meninjau video dan slide sebanyak yang Anda mau. Cara belajar interaktif ini memungkinkan Anda memperoleh pengetahuan mendalam dan pengalaman praktis dengan data table. Coba gratis. Lihat juga Cheat Sheet Paket R data.table dari DataCamp.

Mudah-mudahan berkat tutorial R data.table ini Anda kini memahami sintaks fundamental data.table, dan siap bereksperimen sendiri. Jika Anda memiliki pertanyaan tentang paket data.table, lihat di sini. Matt dan Arun sangat aktif. Salah satu tulisan blog berikutnya tentang paket data.table akan lebih teknis, menyoroti berbagai kemungkinan luas dengan data table. Nantikan!

Topik
R

Pelajari lebih lanjut tentang R

Kursus

Manipulasi Data dengan data.table di R

4 jam
26.5K
Menguasai konsep dasar tentang manipulasi data, seperti penyaringan, pemilihan, dan perhitungan statistik kelompok menggunakan data.table.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya