L'un des éléments suivants supprimera la colonne foo
du tableau de données df3
:
# Method 1 (and preferred as it takes 0.00s even on a 20GB data.table)
df3[,foo:=NULL]
df3[, c("foo","bar"):=NULL] # remove two columns
myVar = "foo"
df3[, (myVar):=NULL] # lookup myVar contents
# Method 2a -- A safe idiom for excluding (possibly multiple)
# columns matching a regex
df3[, grep("^foo$", colnames(df3)):=NULL]
# Method 2b -- An alternative to 2a, also "safe" in the sense described below
df3[, which(grepl("^foo$", colnames(df3))):=NULL]
data.table prend également en charge la syntaxe suivante:
## Method 3 (could then assign to df3,
df3[, !"foo"]
mais si vous vouliez réellement supprimer la colonne "foo"
de df3
(au lieu d'imprimer simplement une vue de la df3
colonne moins "foo"
), vous voudriez vraiment utiliser la méthode 1 à la place.
(Notez que si vous utilisez une méthode reposant sur grep()
ou grepl()
, vous devez définir pattern="^foo$"
plutôt que "foo"
, si vous ne voulez pas que les colonnes avec des noms comme "fool"
et "buffoon"
(c'est-à-dire celles contenant foo
comme sous-chaîne) soient également mises en correspondance et supprimées.)
Options moins sûres, bien pour une utilisation interactive:
Les deux idiomes suivants fonctionneront également - s'ils df3
contiennent une correspondance de colonne"foo"
- mais échoueront d'une manière probablement inattendue si ce n'est pas le cas. Si, par exemple, vous utilisez l'un d'eux pour rechercher la colonne inexistante "bar"
, vous vous retrouverez avec un data.table à zéro ligne.
En conséquence, ils sont vraiment les mieux adaptés à une utilisation interactive où l'on peut, par exemple, vouloir afficher une table de données moins toutes les colonnes avec des noms contenant la sous-chaîne "foo"
. À des fins de programmation (ou si vous souhaitez réellement supprimer les colonnes df3
plutôt que d'en copier), les méthodes 1, 2a et 2b sont vraiment les meilleures options.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Enfin, certaines approches sont utilisées with=FALSE
, mais data.table
s'éloignent progressivement de cet argument, il est donc déconseillé de les éviter; montrant ici afin que vous sachiez que l'option existe au cas où vous en auriez vraiment besoin:
# Method 5a (like Method 3)
df3[, !"foo", with=FALSE]
# Method 5b (like Method 4)
df3[, !grep("^foo$", names(df3)), with=FALSE]
# Method 5b (another like Method 4)
df3[, !grepl("^foo$", names(df3)), with=FALSE]
dt
au lieu dedf3
...