Выберите несколько столбцов в data.table по их числовым индексам

Как мы можем выбрать несколько столбцов, используя вектор их числовых индексов (позиции) в data.table?

Так мы будем делать с data.frame:

df <- data.frame(a = 1, b = 2, c = 3)
df[ , 2:3]
#   b c
# 1 2 3
4b9b3361

Для версий 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), см. эту предыдущую версию этого ответа. См. Также NEWS, Изменения в v1.9.8/ПОТЕНЦИАЛЬНО РАЗРЕШЕНИЕ ИЗМЕНЕНИЙ/пункт 2.

157
ответ дан 14 нояб. '12 в 20:28
источник

Если вы хотите использовать имена столбцов для выбора столбцов, просто используйте .(), который является псевдонимом для list():

library(data.table)
dt <- data.table(a = 1:2, b = 2:3, c = 3:4)
dt[ , .(b, c)] # select the columns b and c
# Result:
#    b c
# 1: 2 3
# 2: 3 4
32
ответ дан 16 авг. '15 в 23:57
источник

Это немного подробный, но я привык использовать скрытую переменную .SD.

b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]

Это немного хлопот, но вы не потеряете другие функции data.table(я не думаю), поэтому вы все равно должны использовать другие важные функции, такие как таблицы соединений и т.д.

29
ответ дан 05 мая '15 в 23:28
источник

Начиная с версии v.1.10.2, вы также можете использовать ..

dt <- data.table(a=1:2, b=2:3, c=3:4)

keep_cols = c("a", "c")

dt[, ..keep_cols]
3
ответ дан 02 мая '17 в 9:48
источник

@Tom, большое спасибо за указание этого решения. Это отлично работает для меня.

Я искал способ просто исключить один столбец из печати и из приведенного выше примера. Чтобы исключить второй столбец, вы можете сделать что-то вроде этого

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)]
1
ответ дан 04 нояб. '15 в 11:46
источник

вы также можете рассмотреть пакет dplyr. Он позволяет манипулировать кадром данных с использованием более простой структуры. пример будет использовать команду select, которую я могу захватить по имени только переменные в кадре данных, которые я хочу

выберите (.data, var1, var7, var12)

Глаголы, используемые в dplyr

0
ответ дан 08 июля '16 в 18:05
источник