Seleccione múltiples columnas en data.table por sus índices numéricos

¿Cómo podemos seleccionar múltiples columnas usando un vector de sus índices numéricos (posición) en data.table ?

Así es como lo haríamos con un data.frame :

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

Para las versiones de data.table >= 1.9.8 , todo lo siguiente 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] # 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 

Para las versiones de data.table < 1.9.8 (para las cuales la selección de columna numérica requirió el uso de with = FALSE ), vea esta versión previa de esta respuesta. Ver también NOTICIAS , Cambios en v1.9.8 / CAMBIOS POTENCIALMENTE ROTOS / punto 2.

Es un poco detallado, pero me he acostumbrado a usar la variable oculta .SD .

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

Es un poco molesto, pero no pierdes otras características de data.table (no creo), por lo que aún deberías poder usar otras funciones importantes como join tables, etc.

Si desea utilizar nombres de columna para seleccionar las columnas, simplemente use .() , Que es un alias para 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 

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] 

@Tom, muchas gracias por señalar esta solución. Funciona muy bien para mí.

Estaba buscando una forma 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)]