Respuestas:
Para las versiones de data.table >= 1.9.8
, todo lo siguiente simplemente 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 versiones de data.table < 1.9.8
(para las cuales la selección de columnas numéricas requirió el uso de with = FALSE
), vea esta versión anterior de esta respuesta. Ver también NOTICIAS en v1.9.8, POTENCIALMENTE ROMPIENDO CAMBIOS, punto 3.
DT[,list(b:c)
, como me pareció conveniente transformar las columnas directamente en la tabla de datos, por ejemplo, puedo hacerlo DT[,list(1/b,2*c)]
, pero esto no funciona con.
with=FALSE
innecesario en este caso: github.com/Rdatatable/data.table/issues/…
data.frame
forma compatible de usar with=FALSE
. Sin embargo, a partir de hace aproximadamente 3 semanas, la versión de desarrollo de data.table se ha modificado para llamadas como dt[, 2]
, dt[, 2:3]
, dt[, "b"]
, y dt[, c("b", "c")]
se comportan de la misma como lo hacen en la con data.frame
s sin tener que establecer explícitamente with=FALSE
. ¡Es fantástico! Consulte aquí la confirmación particular, incluida la entrada NOTICIAS que describe el cambio.
Es un poco detallado, pero me he acostumbrado a usar la .SD
variable oculta .
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
Es un poco complicado, pero no pierde otras características de tabla de datos (no creo), por lo que aún debería poder usar otras funciones importantes como unir tablas, etc.
Desde v1.10.2 en adelante, también puede usar ..
dt <- data.table(a=1:2, b=2:3, c=3:4)
keep_cols = c("a", "c")
dt[, ..keep_cols]
dt[, !..keep_cols]
y dt[, -..keep_cols]
funciona como se esperaba!
@ Tom, muchas gracias por señalar esta solución. Funciona muy bien para mí.
Estaba buscando una manera de excluir una columna de la impresión y del ejemplo anterior. Para excluir la segunda columna, puede hacer algo como esto
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"]
ydt[,"a", with=FALSE]
vea qué opción útil es realmente.