2014-10-13 6 views
5

Der Versuch, eine Spalte eines Objekts der Klasse grouped_df per Index auswählen gibt "Fehler: Index außerhalb der Grenzen". Zum BeispielIndizierung grupped_df Objekt

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 

Dies ist mit R-Version 3.1.1 und dplyr 0.3.0.2. Ich bin mir nicht sicher, ob das ein Bug oder absichtlich ist. Gibt es einen guten Grund, warum es so funktioniert? Ich habe lieber nicht zu erinnern, meinen Datenrahmen nicht gruppieren dplyr nach der Verwendung jedes Mal ...

aktualisieren ein wenig weiter in dieser sieht habe, meine Vermutung ist, dass die Motivation für die Definition [.grouped_dfthis way für die Gruppen ist beim Aufruf von zB erhalten bleiben x[1:3] (was funktioniert). Wenn der Index jedoch nicht Teil der Gruppierungsvariablen ist, wird der obige Fehler ausgelöst. Vielleicht könnte es so modifiziert werden, dass es in diesem Fall ruft [.tbl_df und eine Warnung zugleich wirft ...

Update 2[.grouped_df von dplyr in der Entwicklungsversion geändert wurde (0.3.0.9000). Es wird immer noch ein Fehler ausgegeben, aber es wird jetzt klarer, und es wird angegeben, welche Gruppierungsvariablen nicht enthalten waren.

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

Die beste Lösung, die ich gefunden habe, so dass mein Code in dieser Situation nicht abstürzt, ist %>% ungroup am Ende der dplyr Befehlskette zu schließen.

+0

Mit der R-Version 3.1.0 unter Windows mit dplyr_0.2 kann ich problemlos auf alle Spalten zugreifen. –

+0

Ich bekomme diesen Fehler auch mit R 3.1.1 und dplyr 0.3.0.2 auf einem Mac. – dhendrickson

+0

Ich bekomme den gleichen Fehler mit R 3.1.1 und dplyr 0.3.0.2 auf Ubuntu, aber ich glaube nicht, dass ich dieses Problem hatte, als ich dplyr 0.2 verwendete. Das Subsetting mit 'dplyr's' select() 'funktioniert bei Nicht-Gruppierungsvariablen, aber ich kann keine Untermenge mit Klammern oder der Basis-' subset() 'Funktion verwenden. Basierend auf [dieser Ausgabe] (https://github.com/hadley/dplyr/issues/170) Ich denke, es ist absichtlich, aber wow hat es mich für eine Weile stumpf. –

Antwort

0

Für group_by kann die Funktion [ die Spalte des DF außer den gruppierten Variablen nicht unterteilen. Details unter issuse,