на основе набора данных в OP, это похоже на data.table. Для подмножества столбцов в data.table, нам нужно with = FALSE
df[, cnm, with = FALSE]
# X2 X3
#1: 1 3
#2: 5 3
#3: 3 4
#4: 6 5
#5: 2 2
Согласно ?data.table
документации
с - По умолчанию с = TRUE и J оценивается в рамках х; Имена столбцов могут использоваться как переменные.
Когда с = FALSE J является символ вектор имен столбцов, числовой вектора позиций столбцов для выбора или вид startcol: endcol, и возвращаемое значение всегда data.table. с = FALSE часто полезно в data.table для динамического выбора столбцов. Обратите внимание, что x [, cols, with = FALSE] эквивалентно x [, .SD, .SDcols = cols].
Если набор данных data.frame
, просто
setDF(df)#convert to 'data.frame'
df[cnm]
# X2 X3
#1 1 3
#2 5 3
#3 3 4
#4 6 5
#5 2 2
будет подмножество набора данных
[[
для извлечения одного столбца из data.frame
или list
элемента
Применяя Код OP в файле data.table
ge тс же сообщение об ошибке
df[[cnm]]
Ошибка в .subset2 (х, я, точный = точный): индекс вне границ
Если мы делаем выбор data.frame Подменю в data.table
, он не будет работать либо
df[cnm]
Ошибка в [.data.table
(Д.Ф., УНМ): Когда я это data.table (или ), столбцы для объединения должны быть указаны либо с использованием аргумента «on =» (см. Таблицу данных), либо путем ввода x (т. отсортировано, и, помечены как отсортированные, см.? setkey). Ключ-соединения могут иметь дополнительные преимущества скорости при очень больших данных из-за сортировки x в ОЗУ.
спасибо - сначала работает, но требует преобразования кадра данных в таблицу ...второй не работал, когда я пытался:> cnm <-c ("X2", "X3") > df [cnm] Ошибка в '.data.table' (df, cnm): Когда i является data.table (или символьный вектор), x должен быть введен в ключ (то есть отсортирован и помечен как отсортированный), поэтому data.table знает, к каким столбцам присоединяться и использовать x для сортировки. Сначала вызовите setkey (x, ...), см. «Setkey». –
Второй не работает, потому что ваш набор данных «data.table» – akrun