Każda z poniższych czynności spowoduje usunięcie kolumny foo
z tabeli data.table 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 obsługuje również następującą składnię:
## Method 3 (could then assign to df3,
df3[, !"foo"]
ale jeśli rzeczywiście chce usunąć kolumnę "foo"
z df3
(a nie tylko drukowanie widok df3
minus kolumny "foo"
), które tak naprawdę nie chcą korzystać z metody 1 zamiast.
(Pamiętaj, że jeśli używasz metody polegającej na grep()
lub grepl()
, musisz pattern="^foo$"
raczej ustawić , niż "foo"
, jeśli nie chcesz, aby kolumny o nazwach takich jak "fool"
i "buffoon"
(tj. Zawierające foo
jako podłańcuch) również były dopasowywane i usuwane).
Mniej bezpieczne opcje, w porządku do użytku interaktywnego:
Kolejne dwa idiomy również będą działać - jeśli df3
zawiera dopasowanie do kolumny"foo"
- ale zakończy się niepowodzeniem w prawdopodobnie nieoczekiwany sposób, jeśli nie będzie. Jeśli, na przykład, użyjesz któregoś z nich do wyszukania nieistniejącej kolumny "bar"
, skończysz na zerowym wierszu data.table.
W rezultacie najlepiej nadają się do użytku interaktywnego, w którym można np. Wyświetlić tabelę data.tab pomniejszoną o kolumny zawierające nazwy zawierające podłańcuch "foo"
. Do celów programistycznych (lub jeśli chcesz faktycznie usunąć kolumny df3
z kopii, a nie z jej kopii), Metody 1, 2a i 2b są naprawdę najlepszymi opcjami.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Wreszcie istnieją podejścia wykorzystujące with=FALSE
, choć data.table
stopniowo odchodzi od używania tego argumentu, więc odradza się, gdzie można tego uniknąć; pokazując tutaj, abyś wiedział, że istnieje opcja na wypadek, gdybyś naprawdę jej potrzebował:
# 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
zamiastdf3
...