Risposte:
Per le versioni di data.table >= 1.9.8
, le seguenti funzioni funzionano:
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]
# b c
# 1: 2 3
# select single column by name
dt[, "a"]
# a
# 1: 1
# select multiple columns by name
dt[, c("a", "b")]
# a b
# 1: 1 2
Per le versioni di data.table < 1.9.8
(per le quali la selezione della colonna numerica ha richiesto l'uso di with = FALSE
), vedere questa versione precedente di questa risposta. Vedi anche NEWS su v1.9.8, CAMBIAMENTI POTENZIALMENTE ROTANTI, punto 3.
DT[,list(b:c)
, poiché ho trovato conveniente trasformare le colonne direttamente nella tabella dei dati, ad esempio, posso farlo DT[,list(1/b,2*c)]
, ma non funziona con.
with=FALSE
questo caso non sarà necessario modificare il pacchetto : github.com/Rdatatable/data.table/issues/…
data.frame
modo compatibile per l'uso with=FALSE
. Tuttavia, come di circa 3 settimane fa, la versione di sviluppo di data.table è stato modificato per chiamate come dt[, 2]
, dt[, 2:3]
, dt[, "b"]
, e dt[, c("b", "c")]
si comportano allo stesso come fanno nel con data.frame
s , senza dover impostare in modo esplicito with=FALSE
. È fantastico! Vedere qui per il commit specifico, inclusa la voce NEWS che descrive la modifica.
È un po 'prolisso, ma mi sono abituato a usare la .SD
variabile nascosta .
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
È un po 'una seccatura, ma non perdi altre funzionalità di data.table (non credo), quindi dovresti essere ancora in grado di utilizzare altre funzioni importanti come join table ecc.
Dalla v1.10.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]
dt[, !..keep_cols]
e dt[, -..keep_cols]
funziona come previsto!
@ Tom, grazie mille per aver segnalato questa soluzione. Mi va benissimo.
Stavo cercando un modo per escludere solo una colonna dalla stampa e dall'esempio sopra. Per escludere la seconda colonna puoi fare qualcosa del genere
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)]
dt[,"a"]
edt[,"a", with=FALSE]
per vedere quale opzione utile è davvero.