Last chance! 50% off DataCamp Premium
Sale ends in
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.
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’ 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’ 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
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 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&lt;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!
Pelajari lebih lanjut tentang R
Kursus
Kursus
Kursus
blogs
David Woods
13 mnt
blogs
Dario Radečić
15 mnt
blogs
Hugo Bowne-Anderson
13 mnt

blogs
Javier Canales Luna
14 mnt