Respostas:
Para versões do data.table >= 1.9.8 , tudo a seguir apenas funciona:
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
Para versões do data.table < 1.9.8 (para as quais a seleção numérica da coluna exigia o uso de with = FALSE), consulte esta versão anterior desta resposta. Consulte também NEWS na v1.9.8, POTENCIALMENTE QUEBRANDO ALTERAÇÕES, ponto 3.
DT[,list(b:c), como achei conveniente transformar as colunas diretamente na tabela de dados, por exemplo, posso fazer isso DT[,list(1/b,2*c)], mas isso não funciona com.
with=FALSEdesnecessário neste caso: github.com/Rdatatable/data.table/issues/...
data.framemaneira compatível de usarwith=FALSE . No entanto, a partir de cerca de 3 semanas atrás, a versão de desenvolvimento do data.table foi modificado para chamadas como dt[, 2], dt[, 2:3], dt[, "b"], e dt[, c("b", "c")]se comportam da mesma como fazem na com data.frames sem ter que explicitamente definido with=FALSE. É incrível! Veja aqui o commit específico, incluindo a entrada NEWS que descreve a alteração.
É um pouco detalhado, mas eu me acostumei a usar a .SDvariável oculta .
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
É um pouco complicado, mas você não perde outros recursos de data.table (eu não acho), então você ainda deve poder usar outras funções importantes, como juntar tabelas, etc.
A partir da v1.10.2, você também pode usar ..
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] funciona como esperado!
@ Tom, muito obrigado por apontar esta solução. Funciona muito bem para mim.
Eu estava procurando uma maneira de excluir apenas uma coluna da impressão e do exemplo acima. Para excluir a segunda coluna, você pode fazer algo assim
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]veja como é realmente uma opção útil.