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
indeks  mget  get 
comments powered by Disqus