Ответы:
Для версий 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/issues/…
data.frame
совместимого способа использования with=FALSE
. Тем не менее, по состоянию на около 3 недель назад, разрабатываемая версия data.table была изменена на звонки , как dt[, 2]
, dt[, 2:3]
, dt[, "b"]
, и dt[, c("b", "c")]
ведут себя так же , как они делают в с data.frame
й без необходимости явно устанавливать with=FALSE
. Это потрясающе! Смотрите здесь для конкретной фиксации, включая запись NEWS, описывающую изменения.
Это немного многословно, но я привык к использованию скрытой .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]
посмотрите, какой это полезный вариант.