2012-08-23 3 views
6

Я пытаюсь фильтровать кадры данных, которые имеют только один столбец. Это приводит к вектору возвращается так:Фильтрация одностолбцовых фреймов данных

single.c <- data.frame(col1=c(1,2,3,4,5), row.names=C("r1","r2","r3","r4","r5")) 
single.c[single.c$col1 > 2,] 

[1] 3 4 5 

То, что я на самом деле хочу, возвращаемые данные, как это для dataframes несколько колонок:

multi.c <- data.frame(col1=c(1,2,3,4,5), col2=c(1,2,3,4,5), row.names=c("r1","r2","r3","r4","r5")) 
multi.c[multi.c$col2 > 2,] 

    col1 col2 
r3 3 3 
r4 4 4 
r5 5 5 

Я могу видеть это имеет смысл возвращать вектор, если нет других столбцов, но обычно я хочу видеть, какие строки дали этот результат тоже. Почему это происходит, и есть ли простой способ сохранить форму кадра данных в результате, включая имена розеток?

ответ

10

Используйте drop аргумент для выбора функций:

single.c[single.c$col1 > 2, ,drop=F] 

# col1 
#r3 3 
#r4 4 
#r5 5 

Из документации [:

падение

Для матриц и массивов. Если TRUE, результат принуждается к самому низкому возможному измерению (см. Примеры). Это работает только для извлечения элементов, а не для замены. См. Drop для получения дополнительной информации.

+3

Спасибо, я понятия не имел, что есть документация, указанная в разделе '? '[''! – MattLBeck

+2

Отличный материал! Я всегда задавался вопросом, как получить data.frame, извлекая один столбец из существующего data.frame! Я использовал data.frame (col1 = multi.col $ col1, row.names = rownames (multi.col)), чтобы сделать то же самое! Doh! –

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