Будь-яке з наведеного нижче видалить стовпець fooіз таблиці даних 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 також підтримує такий синтаксис:
## Method 3 (could then assign to df3,
df3[, !"foo"]
хоча, якщо ви насправді хотіли видалити стовпчик "foo"із df3(на відміну від простого друку подання df3мінус стовпця "foo"), ви б дійсно захотіли скористатися Методом 1.
(Зверніть увагу, що якщо ви використовуєте метод, який покладається на grep()або grepl(), вам потрібно встановити, pattern="^foo$"а не "foo", якщо ви не хочете, щоб стовпці з іменами на зразок "fool"і "buffoon"(тобто такими, що містять fooяк підрядку) також були зіставлені та видалені.)
Менш безпечні варіанти, штрафи для інтерактивного використання:
Наступні дві ідіоми також працюватимуть - якщо вони df3містять відповідність стовпців"foo" - але, напевно, будуть невдалі, якщо цього немає. Якщо, наприклад, ви використовуєте будь-який з них для пошуку неіснуючого стовпця "bar", ви отримаєте нульовий рядок data.table.
Як наслідок, вони дійсно найкраще підходять для інтерактивного використання, де можна, наприклад, бажати відобразити таблицю даних. мінус будь-які стовпці з іменами, що містять підрядку "foo". Для цілей програмування (або якщо ви хочете фактично видалити стовпець (-и), df3а не з його копії), Методи 1, 2а та 2b - це справді найкращі варіанти.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Нарешті, існують підходи, які використовують with=FALSE, хоча data.tableпоступово відходить від використання цього аргументу, тому тепер не відволікається, де можна цього уникнути; показуючи тут, щоб ви знали, що варіант існує у випадку, якщо він вам справді потрібен:
# 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замістьdf3...