L'un des éléments suivants supprimera la colonne foo
à partir 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]
table.de.données prend également en charge la syntaxe suivante :
## Method 3 (could then assign to df3,
df3[, !"foo"]
bien que si vous vouliez réellement supprimer la colonne "foo"
de df3
(par opposition à la simple impression d'une vue de df3
colonne moins "foo"
), il est préférable d'utiliser la méthode 1.
(Notez que si vous utilisez une méthode s'appuyant sur grep()
ou grepl()
vous devez définir pattern="^foo$"
plutôt que "foo"
si vous ne voulez pas de colonnes portant des noms comme "fool"
y "buffoon"
(c'est-à-dire ceux qui contiennent foo
comme une sous-chaîne) pour être également mis en correspondance et supprimé).
Options moins sûres, parfaites pour une utilisation interactive :
Les deux idiomes suivants fonctionneront également -- si df3
contient une colonne correspondant à "foo"
-- mais échouera d'une manière probablement inattendue s'il ne le fait pas. Si, par exemple, vous utilisez l'un d'entre eux pour rechercher la colonne inexistante "bar"
vous vous retrouverez avec un tableau data.table à zéro ligne.
Par conséquent, ils conviennent mieux à une utilisation interactive où l'on peut, par exemple, vouloir afficher un tableau de données sans les colonnes dont les noms contiennent la sous-chaîne "foo"
. À des fins de programmation (ou si vous souhaitez réellement supprimer la ou les colonnes de l'application df3
plutôt qu'à partir d'une copie de celui-ci), les méthodes 1, 2a et 2b sont vraiment les meilleures options.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Enfin, il existe des approches utilisant with=FALSE
mais data.table
s'éloigne progressivement de l'utilisation de cet argument. Il est donc déconseillé de l'utiliser lorsque vous pouvez l'éviter ; il est indiqué ici pour 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]
3 votes
Il aurait été plus clair de nommer le tableau data.table
dt
au lieu dedf3
...