Відповіді:
Для версій data.table >= 1.9.8 працюють лише такі:
library(data.table)
dt <- data.table(a = 1, b = 2, c = 3)
# select single column by index
dt[, 2]
# b
# 1: 2
# select multiple columns by index
dt[, 2:3]
# b c
# 1: 2 3
# select single column by name
dt[, "a"]
# a
# 1: 1
# select multiple columns by name
dt[, c("a", "b")]
# a b
# 1: 1 2
Про версії data.table < 1.9.8 (для вибору чисельного стовпця потрібне використання with = FALSE) див. Попередню версію цієї відповіді. Дивіться також НОВИНИ на v1.9.8, ПОТЕНЦІАЛЬНІ ЗМІНИ, пункт 3.
DT[,list(b:c), як мені було зручно перетворювати стовпці безпосередньо в таблиці даних, наприклад, я можу це зробити DT[,list(1/b,2*c)], але це не працює з.
with=FALSEу цьому випадку зроблять непотрібними: github.com/Rdatatable/data.table/isissue/…
data.frameсумісного способу використання with=FALSE. Тим НЕ менше, станом на близько 3 тижнів тому, що розробляється версія data.table була змінена на дзвінки , як dt[, 2], dt[, 2:3], dt[, "b"], і dt[, c("b", "c")]поводяться так само , як вони роблять в с data.frameй без необхідності явно встановлювати with=FALSE. Це надзвичайно! Дивіться тут про конкретний комітет, включаючи запис НОВИНИ, що описує зміни.
Це трохи багатослівно, але я звик використовувати приховану .SDзмінну.
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
Це трохи клопоту, але ви не втрачаєте інших функцій data.table (я не думаю), тому ви все одно зможете використовувати інші важливі функції, такі як таблиці приєднання тощо.
Від v1.10.2 і далі ви також можете користуватися ..
dt <- data.table(a=1:2, b=2:3, c=3:4)
keep_cols = c("a", "c")
dt[, ..keep_cols]
dt[, !..keep_cols]і dt[, -..keep_cols] працює, як очікувалося!
@Том, дуже дякую, що вказали на це рішення. Це чудово працює для мене.
Я шукав спосіб просто виключити один стовпчик із друку та із наведеного вище прикладу. Щоб виключити другий стовпець, ви можете зробити щось подібне
library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]
dt[,"a"]іdt[,"a", with=FALSE]побачите, який корисний варіант це насправді.