Будь-яке з наведеного нижче видалить стовпець 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
...