Lembar contekan R akhir

Kecepatan. Sintaks yang ringkas. Kompatibilitas mundur.

Tapi terutama kecepatan.

Itulah beberapa fitur yang membuat data.table R menarik bagi para penggemarnya.

Dan bahkan jika Anda adalah pengguna tidyverse yang dikonfirmasi (seperti saya), data.table dapat menjadi tambahan yang berguna untuk toolkit R Anda - terutama saat bekerja dengan kumpulan data besar, dalam aplikasi Shiny, atau dalam fungsi paket. 

Cheat sheet pamungkas data.table R ini berbeda dari banyak lainnya karena interaktif. Anda dapat mencari frase tertentu seperti kolom add atau dengan jenis kelompok tugas seperti Subset atau membentuk kembali . Selain itu, karena contekan ini menyertakan kode “terjemahan” tidyverse, Anda juga dapat mencari kata kerja dplyr favorit seperti mutate atau rowwise .

Pengguna terdaftar dapat mengunduh versi yang diperluas dari tabel interaktif ini untuk digunakan pada sistem mereka sendiri! Pendaftaran gratis. 

Cari tugas dan kode data.table dan rapi

Tugas Tipe Kode data.table Kode Tidyverse
Baca dalam file CSV Impor mydt <- fread ("myfile.csv") myt <- read_csv ("myfile.csv") #OR myt <- vroom :: vroom ("myfile.csv")
Impor x jumlah baris pertama dari file CSV Impor mydt_x <- fread ("myfile.csv", nrows = x) myt_x <- read_csv ("myfile.csv", n_max = x)
Impor hanya baris-baris itu dari file CSV yang cocok dengan pola tertentu Impor mydt_pattern <- fread ("grep 'mypattern' myfile.csv") myt_pattern <- vroom :: vroom (pipa ("grep 'mypattern' myfile.csv"))
Impor file terkompresi .gz Impor mydt <- fread ("myfile.gz") myt <- vroom :: vroom ("myfile.gz")
Impor file terkompresi a.zip impor mydt <- fread (cmd = 'unzip -cq myfile.zip') myt <- read_csv ("myfile.zip")
Buat tabel data dari bingkai data yang ada (tibble untuk tidyverse) Impor mydt <- as.data.table (mydf) #OR

setDT (mydf)

myt <- as_tibble (mydf)
Ubah data.table di tempatnya tanpa membuat salinan Bertengkar fungsi apa pun yang dimulai dengan set seperti setkey (mydt, mycol) atau menggunakan operator: = dalam tanda kurung tak dapat diterapkan
Urutkan baris berdasarkan beberapa nilai kolom Bertengkar mydt2 <- mydt [order (colA, -colB)] #OR

setorder (mydt, colA, -colB)

myt <- mengatur (myt, colA, -colB)
Ganti nama kolom Bertengkar setnames (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB')) myt <- ganti nama (myt, NewColA = colA, NewColB = colB)
Menyusun ulang kolom: Pindahkan beberapa kolom ke posisi depan (paling kiri) Bertengkar setcolorder (mydt, c ("colB", "colC")) # colB sekarang di posisi 1 dan colC di posisi 2 myt <- relokasi (myt, colB, colC)
Filter baris untuk baris nomor n Subset mydt2 <- mydt [n] myt2 <- slice (myt, n)
Filter untuk baris terakhir Subset mydt2 <- mydt [.N] myt2 <- slice (myt, n ())
Filter baris berdasarkan kondisi Subset # Dalam beberapa kasus, setkey (mydt, colA, colB) akan mempercepat kinerja # untuk tes logis pada colA dan colB; sama dengan kolom lainnya

mydt2 <- mydt [ekspresi logis]

myt2 <- filter (myt, ekspresi logis)
Filter baris di mana colA sama dengan string1 atau string2 Subset mydt2 <- mydt [colA% chin% c ("string1", "string2")] myt2 <- filter (myt, colA% in% c ("string1", "string2"))
Filter baris yang colA cocok dengan ekspresi reguler Subset mydt2 <- mydt [colA% seperti% "mypattern"] myt2 <- filter (myt, stringr :: str_detect (colA, "mypattern"))
Filter baris di mana nilai colA berada di antara 2 angka Subset mydt2 <- mydt [colA% antara% c (n1, n2)] myt2 <- filter (myt, between (colA, n1, n2))
Filter untuk n baris pertama menurut grup Subset mydt2 <- mydt [, .SD [1: n], oleh = groupcol] myt2% group_by (groupcol)%>% slice (1: n)
Filter baris untuk nilai maksimum berdasarkan grup Subset mydt2 <- mydt [, .SD [yang.max (valcol)], oleh = groupcol] myt2% group_by (groupcol)%>% filter (valcol == max (valcol))
Pilih kolom dan kembalikan hasil sebagai vektor Subset myvec <- mydt [, colname] myvec <- pull (myt, colname)
Pilih beberapa kolom untuk membuat data.table baru (bingkai data atau tibble untuk tidyverse) Subset mydt2 <- mydt [, daftar (colA, colB)] #OR

mydt2 <- mydt [,. (colA, colB)] #OR

mydt2 <- mydt [, c ("colA", "colB")]

myt2 <- pilih (myt, colA, colB)
Pilih beberapa kolom menggunakan variabel yang berisi nama kolom Subset my_col_names <- c ("colA", "colB")

mydt2 <- mydt [, ..my_col_names] #OR

mydt2 <- mydt [, my_col_names, dengan = FALSE]

my_col_names <- c ("colA", "colB")

myt2 <- pilih (myt, all_of (my_col_names))

Pilih beberapa kolom dan ganti nama beberapa Subset mydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)] myt2 <- pilih (myt, newname1 = col1, newname2 = col2, col3)
Kecualikan beberapa kolom Subset mydt2 <- mydt [, -c ("colA", "colB")] #OR

mydt2 <- mydt [,! c ("colA", "colB")] #OR

my_col_names <- c ("colA", "colB")

mydt2 <- mydt [,! .. my_col_names]

myt2 <- pilih (myt, -c (colA, colB)) #OR

my_col_names <- c ("colA", "colB")

myt2 <- pilih (myt, - {{my_col_names}})

Hapus baris duplikat berdasarkan nilai di beberapa kolom Subset mydt2 <- unique (mydt, by = c ("colA", "colB")) myt2 <- berbeda (myt, colA, colB, .keep_all = TRUE)
Hitung baris unik berdasarkan beberapa kolom Meringkaskan uniqueN (mydt, by = c ("colA", "colB")) nrow (berbeda (myt, colA, colB))
Jalankan penghitungan ringkasan pada data Meringkaskan mydt2 <- mydt [, myfun (colA ...)] myt2% meringkas (ColName = myfun (colA ...))
Jalankan penghitungan ringkasan pada data oleh satu grup Meringkaskan mydt2 <- mydt [, myfun (colA ...), oleh = groupcol] myt2%

group_by (groupcol)%>%

meringkaskan(

NewCol = myfun (colA ...)

)

Jalankan penghitungan ringkasan pada data dengan satu grup dan beri nama kolom baru Meringkaskan mydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), oleh = groupcol] myt2%

group_by (groupcol)%>%

meringkaskan(

NewCol = myfun (colA ...)

)

Jalankan penghitungan ringkasan pada data dengan beberapa kelompok Meringkaskan mydt2 <- mydt [, myfun (colA ...), oleh =. (groupcol1, groupcol2)] myt2%

group_by (groupcol1, groupcol2)%>%

meringkaskan(

NewCol = myfun (colA ...)

)

Jalankan penghitungan ringkasan pada data yang difilter oleh beberapa grup Meringkaskan mydt2 <- mydt [ekspresi filter, myfun (colA), oleh =. (groupcol1, groupcol2)] myt2%

filter (ekspresi filter)%>%

group_by (groupcol1, groupcol2)%>%

meringkaskan(

NewCol = myfun (colA), .groups = "keep"

)

Hitung jumlah baris dengan kelompok Meringkaskan mydt2 <- mydt [,. N, by = groupcol] #untuk satu grup #OR

mydt2 <- mydt [, .N, oleh =. (groupcol1, groupcol2)]

myt2 <- count (myt, groupcol) #untuk satu grup #OR

myt2 <- hitung (myt, groupcol1, groupcol2)

Meringkas beberapa kolom dan mengembalikan hasil dalam beberapa kolom Meringkaskan mydt2 <- mydt [, lapply (.SD, myfun),

.SDcols = c ("colA", "colB")]

myt2%

meringkaskan(

seberang (c (colA, colB), myfun)

)

Meringkas beberapa kolom menurut kelompok dan mengembalikan hasil dalam beberapa kolom Meringkaskan mydt2 <- mydt [, lapply (.SD, myfun),

.SDcols = c ("colA", "colB"), oleh = groupcol]

myt2%

group_by (groupcol)%>%

meringkas (di (c (colA, colB), myfun))

Tambahkan kolom Menghitung mydt [, MyNewCol: = myfun (colA)] myt%

mengubah(

MyNewCol = myfun (colA)

)

Tambahkan beberapa kolom sekaligus Menghitung # gunakan fungsi atau ekspresi apa pun

mydt [, `: =` (NewCol1 = myfun (colA), NewCol2 = colB + colC)] #OR

mydt [, c ("NewCol1", "newCol2"): = list (myfun (colA), colB + colC)]

myt%

mengubah(

MyNewCol1 = myfun (colA),

MyNewCol2 = colB + colC

)

Tambahkan kolom menggunakan nilai saat ini dan sebelumnya dari kolom lain, seperti mencari perbedaan antara nilai pada tanggal vs. tanggal sebelumnya Menghitung mydt [, Diff: = colA - shift (colA)] myt <- mutate (myt, Diff = colA - lag (colA))
Tambahkan kolom yang mereferensikan nilai sebelumnya dari kolom oleh grup Menghitung mydt2 <- mydt [, Diff: = colA - shift (colA), oleh = groupcol] myt2% group_by (groupcol)%>% mutate (Diff = colA - lag (colA))
Tambahkan kolom dengan nomor ID baris menurut kelompok Menghitung mydt [, myid: = 1: .N, oleh = groupcol] myt% group_by (groupcol)%>% mutate (myid = row_number ())
Tambahkan kolom berdasarkan beberapa kondisi tanpa menggunakan beberapa pernyataan if else (seperti CASE SQL) Menghitung # Membutuhkan data.table versi 1.13 atau yang lebih baru

# Saya suka setiap kondisi di baris baru tetapi itu tidak wajib

mydt2 <- mydt [, NewCol: = fcase (

kondisi1, "Nilai1",

kondisi2, "Nilai2",

condition3, "Value3",

default = "Other" # nilai untuk yang lainnya

)]

myt2%

mengubah(

NewCol = case_when (

kondisi1 ~ "Nilai1",

kondisi2 ~ "Nilai2",

condition3 ~ "Value3",

BENAR ~ "Lainnya"

)

)

Tambahkan kolom melalui operasi per baris Menghitung mydt [, newcol: = myfun (colB, colC, colD), oleh = 1: nrow (mydt)]

# atau jika colA memiliki semua nilai unik

mydt [, newcol: = myfun (colB, colC, colD), oleh = colA]

myt%

rowwise ()%>%

mengubah(

newcol = myfun (colB, colC, colD)

)

# atau

myt%

rowwise ()%>%

mengubah(

#use dplyr pilih sintaks:

newcol = myfun (c_across (colB: colD))

)

Gabungkan dua kumpulan data dengan lebih dari satu kolom; simpan semua di set1 tetapi hanya cocok di set2 Ikuti mydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] #OR

mydt <- merge (dt1, dt2, by.x = "dt1col", by.y = "dt2col", all.x = TRUE) #OR

setkey (dt1, "dt1col") setkey (dt2, "dt2col") mydt <- dt2 [dt1]

myt <- left_join (df1, df2, oleh = c ("df1col" = "df2col"))
Gabungkan 2 kumpulan data dengan lebih dari satu kolom - simpan semua di set1 tetapi hanya cocok di set2 Ikuti mydt <- merge (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), all.x = TRUE, all.y = FALSE ) #ATAU

setkey (dt1, dt1colA, dt1colB)

setkey (dt2, dt2colA, dt2colB)

mydt <- dt2 [dt1]

myt <- left_join (df1, df2, by = c ("df1colA" = "df2colA", "df1colB" = "df2colB"))
Gabungkan dua kumpulan data dengan satu kolom umum; hanya menyimpan korek api Ikuti mydt <- merge (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2") myt <- inner_join (df1, df2, oleh = c ("df1col" = "df2col"))
Gabungkan dua kumpulan data dengan satu kolom umum dan simpan semua data di kedua kumpulan, apakah ada kecocokan atau tidak Ikuti mydt <- merge (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", all = TRUE) myt <- full_join (df1, df2, oleh = c ("df1col" = "df2col"))
Gabungkan dua kumpulan data dengan menambahkan baris dari satu ke bawah yang lain Ikuti mydt_joined <- rbindlist (daftar (mydt, mydt2)) myt_joined <- bind_rows (myt, myt2)
Bentuk ulang data dari lebar menjadi panjang Membentuk kembali mydt_long <- melt (mydt, measure.vars = c ("col1", "col2", "col3"), variable.name = "NewCategoryColName", value.name = "NewValueColName") myt_long <- pivot_longer (myt, cols = begin_with ("col"), names_to = "NewCategoryColName", values_to = "NewValueColName")
Bentuk ulang data dari panjang menjadi lebar Membentuk kembali mydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName") myt_wide <- pivot_wider (myt, names_from = col1, values_from = ValueColName)
Rangkai beberapa ekspresi Bertengkar mydt [expr1] [expr2] myt%

expr1%>%

expr2

Ekspor data ke file CSV Ekspor fwrite (mydt, "myfile.csv") write_csv (myt, "myfile.csv")
Tambahkan baris ke file CSV yang ada Ekspor fwrite (mydt2, "myfile.csv", tambahkan = TRUE) vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE)
Ekspor data ke file CSV terkompresi Ekspor fwrite (mydt, "myfile.csv.gz", compress = "gzip") vroom :: vroom_write (myt, "myfile2.csv.gz")

Masih banyak lagi yang bisa dipelajari tentang data.table! Untuk beberapa data.table dasar, lihat video pengantar lima menit saya:

Terakhir, situs web data.table memiliki lebih banyak informasi dan tip, seperti penggunaan setkey()dan tip pengindeksan lainnya.