Mit einer der folgenden foo
Optionen wird die Spalte aus der Datentabelle entfernt 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 unterstützt auch die folgende Syntax:
## Method 3 (could then assign to df3,
df3[, !"foo"]
obwohl , wenn Sie es fehlte eigentlich Spalte zu entfernen , "foo"
aus df3
(im Gegensatz zu nur einen Blick auf den Druck df3
minus Spalte "foo"
) Sie wirklich verwenden Methode 1 stattdessen wollen würde.
(Beachten Sie, dass Sie, wenn Sie eine Methode verwenden, die auf grep()
oder grepl()
basiert, festlegen müssen, pattern="^foo$"
anstatt "foo"
, dass Spalten mit Namen wie "fool"
und "buffoon"
(dh solche, die foo
als Teilzeichenfolge enthalten) ebenfalls abgeglichen und entfernt werden sollen.)
Weniger sichere Optionen, gut für den interaktiven Gebrauch:
Die nächsten beiden Redewendungen funktionieren ebenfalls - wenn sie df3
eine Spaltenübereinstimmung enthalten"foo"
-, schlagen jedoch auf wahrscheinlich unerwartete Weise fehl, wenn dies nicht der Fall ist. Wenn Sie beispielsweise eine davon verwenden, um nach der nicht vorhandenen Spalte zu suchen "bar"
, erhalten Sie eine Datentabelle mit null Zeilen.
Infolgedessen eignen sie sich am besten für die interaktive Verwendung, bei der beispielsweise eine Datentabelle ohne Spalten mit Namen angezeigt werden soll, die den Teilstring enthalten "foo"
. Für Programmierzwecke (oder wenn Sie die Spalte (n) tatsächlich df3
aus einer Kopie entfernen möchten, anstatt aus einer Kopie davon) sind die Methoden 1, 2a und 2b wirklich die besten Optionen.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Schließlich gibt es Ansätze with=FALSE
, data.table
die dieses Argument verwenden , sich jedoch allmählich von der Verwendung dieses Arguments entfernen, sodass jetzt davon abgeraten wird, wo Sie es vermeiden können. Hier anzeigen, damit Sie wissen, dass die Option vorhanden ist, falls Sie sie wirklich benötigen:
# 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
zu benennen, anstattdf3
...