Réponses:
Pour les versions de data.table >= 1.9.8
, les éléments suivants fonctionnent tout simplement:
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
Pour les versions de data.table < 1.9.8
(pour lesquelles la sélection de colonne numérique nécessitait l'utilisation de with = FALSE
), consultez cette version précédente de cette réponse. Voir aussi ACTUALITÉS sur la v1.9.8, CHANGEMENTS POTENTIELLEMENT RUPTANTS, point 3.
DT[,list(b:c)
, comme j'ai trouvé pratique de transformer les colonnes directement dans la table de données, par exemple je peux le faire DT[,list(1/b,2*c)]
, mais cela ne fonctionne pas avec.
with=FALSE
inutile dans ce cas: github.com/Rdatatable/data.table/issues/…
data.frame
compatible d'utiliser with=FALSE
. Cependant, il y a environ 3 semaines, la version de développement de data.table a été modifié pour des appels comme dt[, 2]
, dt[, 2:3]
, dt[, "b"]
et dt[, c("b", "c")]
se comporter comme ils le font dans le avec data.frame
s sans avoir à définir explicitement with=FALSE
. C'est génial! Voir ici pour le commit particulier, y compris l'entrée NEWS décrivant le changement.
C'est un peu verbeux, mais je me suis habitué à utiliser la .SD
variable cachée .
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
C'est un peu compliqué, mais vous ne perdez pas sur les autres fonctionnalités data.table (je ne pense pas), vous devriez donc toujours pouvoir utiliser d'autres fonctions importantes comme les tables de jointure, etc.
À partir de la v1.10.2, vous pouvez également utiliser ..
dt <- data.table(a=1:2, b=2:3, c=3:4)
keep_cols = c("a", "c")
dt[, ..keep_cols]
dt[, !..keep_cols]
et dt[, -..keep_cols]
fonctionne comme prévu!
@Tom, merci beaucoup d'avoir signalé cette solution. Ça marche bien pour moi.
Je cherchais un moyen d'exclure simplement une colonne de l'impression et de l'exemple ci-dessus. Pour exclure la deuxième colonne, vous pouvez faire quelque chose comme ça
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"]
etdt[,"a", with=FALSE]
voyez à quel point c'est une option utile.