Bila memakai pakej data.table
untuk membuat fungsi sebagai kode R, pemilihan kolom boleh dibuat dengan menetapkan nama kolom atau indeks kolom. Akan tetapi pemakaian indeks untuk memilih kolom tidak disarankan kerana ia akan mengakibatkan kode susah untuk difahami. Selain itu sekiranya ada kesilapan kode disebabkan indeks yang merujuk kolom yang tidak diingini, mesej amaran tidak akan diberikan. Oleh itu adalah disarankan untuk memakai nama kolom berbanding indeks kolom.
Walaubagaimanapun, sekiranya masih ingin memakai indeks kolom juga atas sebab-sebab tertentu, terdapat tiga cara yang boleh dipakai. Baca seterusnya untuk dapatkan penerangan.
Nama kolom
Untuk memilih kolom berasaskan nama kolom, boleh memakai get
untuk satu kolom atau mget
untuk memilih pelbagai kolom (multiple get).
library(data.table)
DT = data.table(A = 1:6, B = 8:3, C = 5:10)
## Cara asas
DT[B == 4, ]
## Pakai objek
var <- "B"
value <- 4
DT[get(var) == value, ]
## pilih pelbagai kolom
vars <- c("A", "B")
DT[, mget(vars)] #cara mget
Sekiranya memakai get
untuk memilih pelbagai kolom akan hanya menghasilkan vektor kolom pertama dan bukan data.table kolom A dan B.
Indeks
Untuk memilih hanya satu kolom sahaja, caranya:
library(data.table)
DT = data.table(A = 1:6, B = 8:3, C = 5:10)
## pilih kolom 2 (B) yang nilainya bersamaan 4
DT[.(4), on = names(DT)[2]] #cara 1
DT[DT[[2]] == 4] #cara 2
DT[DT[, .I[.SD == 4], .SDcols = 2]] #cara 3
## sebagai objek
var <- 2
value <- 4
DT[.(value), on = names(DT)[var]] #cara 1
DT[DT[[var]] == value] #cara 2
DT[DT[, .I[.SD == value], .SDcols = var]] #cara 3
## indeks kolom guna fungsi grep atau which
vari <- grep("B", colnames(DT))
vari <- which(names(DT) == "B") #cara ini lebih laju
DT[.(4), on = names(DT)[vari]]
Hasilnya untuk kode-kode di atas adalah seperti ini:
A B C
1: 3 4 5
Penggunaan .()
di i
stuktur data.table DT[i, j, by]
adalah alias untuk penggunaan list()
. Fungsi ini sama seperti cara 1 di atas.
DT[list(4), on = names(DT)[2]]
Sekiranya ingin pakai index untuk di fungsi by
adalah seperti di bawah. Cara ini ialah untuk mengira jumlah huruf-huruf i kolom A.
DT1 <- data.table(A = letters[1:5], B = rep(1:13))
## dapatkan index kolom menggunakan 'grep'
ind <- grep("A", names(DT1))
## atau menggunakan 'which'
ind <- which(names(DT1) == "A")
## note - guna 'which' lebih pantas dari 'grep'
## jumlah setiap huruf
DT1[, .N, by = DT1[[ind]]]
Hasilnya
DT1 N
1: a 3
2: b 3
3: c 3
4: d 2
5: e 2