Każda z poniższych czynności spowoduje usunięcie kolumny fooz 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 df3minus 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 foojako 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 df3zawiera 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 df3z 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.tablestopniowo 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]
dtzamiastdf3...