2014-10-13 10 views
5

Provare a selezionare una colonna di un oggetto della classe grouped_df per indice restituisce "Errore: indice fuori limite". Ad esempioIndicizzazione oggetto grouped_df

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 

Questo sta utilizzando R versione 3.1.1 e dplyr 0.3.0.2. Non sono sicuro che si tratti di un bug o di un errore. C'è qualche buona ragione per cui funziona in questo modo? Preferirei non ricordarmi di separare i miei dati frame dopo aver usato dplyr ogni volta ...

Aggiornamento Dopo aver guardato un po 'più in questo, la mia ipotesi è che la motivazione per la definizione [.grouped_dfthis way è per i gruppi da conservare quando si chiama es x[1:3] (che funziona). Tuttavia, quando l'indice non fa parte delle variabili di raggruppamento, viene generato l'errore di cui sopra. Forse potrebbe essere modificato in modo che in questo caso si chiama [.tbl_df e lancia un avvertimento allo stesso tempo ...

Update 2[.grouped_df è stata modificata nella versione di sviluppo di dplyr (0.3.0.9000). Ancora genera un errore, ma ora è più chiaro, specificando quali variabili di raggruppamento non sono state incluse.

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

La soluzione migliore che ho trovato in modo che il mio codice non va in crash in questa situazione, è quello di includere %>% ungroup alla fine della catena di comando dplyr.

+0

Utilizzo di R versione 3.1.0 su Windows con dplyr_0.2 Posso accedere a tutte le colonne senza problemi. –

+0

Sto anche ricevendo questo errore usando R 3.1.1 e dplyr 0.3.0.2 su un Mac. – dhendrickson

+0

Ottengo lo stesso errore con R 3.1.1 e dplyr 0.3.0.2 su Ubuntu, ma non penso di aver avuto questo problema mentre stavo usando dplyr 0.2. Il subsetting con 'dplyr''s' select() 'funziona su variabili non di raggruppamento, ma non posso impostare sottoinsiemi con parentesi o la funzione di base' subset() '. Basato su [questo problema] (https://github.com/hadley/dplyr/issues/170) immagino sia intenzionale, ma wow mi ha lasciato per un po '. –

risposta

0

Per group_by, la funzione [ non può impostare la colonna del df tranne le variabili raggruppate. Vedere i dettagli su issuse,