2014-10-13 5 views
5

Попытка выбрать столбец объекта класса grouped_df по индексу дает «Ошибка: индекс за пределами границ». Например,Indexing grouped_df object

x <- mtcars %>% group_by(am, gear) %>% summarise_each(funs(sum), disp, hp, drat) 
class(x) 
# "grouped_df" "tbl_df"  "tbl"  "data.frame" 
# For some reason the first column can be selected... 
x[1] 
# Source: local data frame [4 x 1] 
# Groups: am 
# am 
#  0 
#  0 
#  1 
#  1  
# ...but any index > 1 fails 
x[2] 
# Error: index out of bounds 
# Coercing to data frame does the trick... 
as.data.frame(x)[2] 
# gear 
#  3 
#  4 
#  4 
#  5 
#... and so does ungrouping 
all(ungroup(x)[2] == as.data.frame(x)[2]) # TRUE 

Это версия R 3.1.1 и dplyr 0.3.0.2. Я не уверен, является ли это ошибкой или преднамеренным. Есть ли веская причина, почему она работает именно так? Я предпочел бы не вспоминать разгруппировать свои кадры данных после использования dplyr каждый раз, когда ...

Update Посмотрев немного дальше в этом, я думаю, что мотивация для определения [.grouped_dfthis way для групп сохраняться при вызове, например x[1:3] (который работает). Однако, когда индекс не является частью переменных группировки, выдается ошибка выше. Возможно, это может быть модифицирован таким образом, что в этом случае она вызывает [.tbl_df и выбрасывает предупреждение в то же время ...

Update 2[.grouped_df было изменено в версии развития dplyr (0.3.0.9000). Он по-прежнему вызывает ошибку, но теперь более ясен, указав, какие переменные группировки не были включены.

x[2] 
# Error in `[.grouped_df`(x, 2) : 
#  cannot group, grouping variables 'am' not included 

Лучшее решение, которое я нашел, так что мой код не откажет в этой ситуации должна включать %>% ungroup в конце dplyr командной цепи.

+0

Использование версии R 3.1.0 для Windows с dplyr_0.2 Я могу получить доступ ко всем столбцам без проблем. –

+0

Я также получаю эту ошибку, используя R 3.1.1 и dplyr 0.3.0.2 на Mac. – dhendrickson

+0

Я получаю ту же ошибку с R 3.1.1 и dplyr 0.3.0.2 на Ubuntu, но я не думаю, что у меня была эта проблема, когда я использовал dplyr 0.2. Подмножество с использованием 'select()' dplyr' 'работает с негрупповыми переменными, но я не могу подмножество с помощью скобок или базовой функции subset(). Основываясь на [этой проблеме] (https://github.com/hadley/dplyr/issues/170), я предполагаю, что это преднамеренно, но ничего себе это не преткнуло меня какое-то время. –

ответ

0

Для group_by функция [ не может подмножать столбец df, кроме сгруппированных переменных. См. Подробную информацию о issuse,