Seleziona più colonne in data.table tramite i loro indici numerici

Come possiamo selezionare più colonne usando un vettore dei loro indici numerici (posizione) in data.table ?

Questo è come faremmo con un data.frame :

 df <- data.frame(a = 1, b = 2, c = 3) df[ , 2:3] # bc # 1 2 3 

Per le versioni di data.table >= 1.9.8 , il seguente tutto funziona >= 1.9.8 :

 library(data.table) dt < - data.table(a = 1, b = 2, c = 3) # select single column by index dt[, 2] # b # 1: 2 # select multiple columns by index dt[, 2:3] # bc # 1: 2 3 # select single column by name dt[, "a"] # a # 1: 1 # select multiple columns by name dt[, c("a", "b")] # ab # 1: 1 2 

Per le versioni di data.table < 1.9.8 (per cui la selezione della colonna numerica richiede l'uso di with = FALSE ), vedere questa versione precedente di questa risposta. Vedi anche NEWS , Modifiche alla v1.9.8 / MODIFICHE POTENZIALMENTE DI BREAKING / punto 2.

È un po ‘prolisso, ma mi sono abituato a usare la variabile nascosta .SD .

 b< -data.table(a=1,b=2,c=3,d=4) b[,.SD,.SDcols=c(1:2)] 

È un po 'complicato, ma non ti perdi su altre funzionalità data.table (non credo), quindi dovresti comunque essere in grado di utilizzare altre funzioni importanti come le tabelle di join, ecc.

Se vuoi usare i nomi delle colonne per selezionare le colonne, usa semplicemente .() , Che è un alias per list() :

 library(data.table) dt < - data.table(a = 1:2, b = 2:3, c = 3:4) dt[ , .(b, c)] # select the columns b and c # Result: # bc # 1: 2 3 # 2: 3 4 

Dalla versione 1.1.2 in poi, puoi anche usare ..

 dt < - data.table(a=1:2, b=2:3, c=3:4) keep_cols = c("a", "c") dt[, ..keep_cols] 

@ Tom, la ringrazio molto per aver sottolineato questa soluzione. Mi va benissimo.

Stavo cercando un modo per escludere una colonna dalla stampa e dall’esempio sopra. Per escludere la seconda colonna puoi fare qualcosa di simile

 library(data.table) dt < - data.table(a=1:2, b=2:3, c=3:4) dt[,.SD,.SDcols=-2] dt[,.SD,.SDcols=c(1,3)]