2016-09-14 2 views
0

Возможно ли подмножество столбцов фрейма данных (в новый df) с использованием имен столбцов, хранящихся в массиве имен столбцов, - например, в c («col1», «col9», "col6")? Я знаю, что я могу сослаться на один столбец в ЦФ, используя ДФ [[ColName]] синтаксис, но это не позволяет мне сделать это для нескольких столбцов:R - столбец данных подмножества данных с использованием имен в списке векторов

df 
    X1 X2 X3 
1: a 1 3 
2: b 5 3 
3: a 3 4 
4: c 6 5 
5: c 2 2 

cnm<-c("X2","X3") 

df[[cnm]] 

Ошибка в .subset2 (х, я, точный = точный): индекс вне границ

благодаря

+0

спасибо - сначала работает, но требует преобразования кадра данных в таблицу ...второй не работал, когда я пытался:> cnm <-c ("X2", "X3") > df [cnm] Ошибка в '.data.table' (df, cnm): Когда i является data.table (или символьный вектор), x должен быть введен в ключ (то есть отсортирован и помечен как отсортированный), поэтому data.table знает, к каким столбцам присоединяться и использовать x для сортировки. Сначала вызовите setkey (x, ...), см. «Setkey». –

+0

Второй не работает, потому что ваш набор данных «data.table» – akrun

ответ

3

на основе набора данных в 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 в ОЗУ.

+0

спасибо - я пропустил setDF (df) ... –

Смежные вопросы