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=FALSE
desnecessário neste caso: github.com/Rdatatable/data.table/issues/...
data.frame
maneira 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.frame
s 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 .SD
variá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.