Ich sehe, was wie seltsam Verhalten der do
Funktion in dplyr
0.3.0.2 aussieht, aber vielleicht ich etwas falsch verstehe.Odd Verhalten von do() -Funktion in dplyr
Ich habe einen Datenrahmen, der wie
set.seed(668)
stuff <- data.frame(name=c(rep("Frodzak", 5), rep("Dumpf", 4), rep("Ackpth", 6)),
state=c("AL", "AK", "AL", "KS", "OR", "LA", "MS", "KY", "FL",
"NY", "NY", "NJ", "PA", "NJ", "NY"),
important=c(F, F, T, F, F, T, F, F, F, T, F, F, F, F, F),
girth=rnorm(15, 250, 80), stringsAsFactors=F)
stuff
name state important girth
1 Frodzak AL FALSE 148.5870
2 Frodzak AK FALSE 321.4144
3 Frodzak AL TRUE 224.8380
4 Frodzak KS FALSE 315.9416
5 Frodzak OR FALSE 331.4336
6 Dumpf LA TRUE 317.4794
7 Dumpf MS FALSE 170.4174
8 Dumpf KY FALSE 275.4033
9 Dumpf FL FALSE 240.9276
10 Ackpth NY TRUE 145.6290
11 Ackpth NY FALSE 267.6902
12 Ackpth NJ FALSE 171.4015
13 Ackpth PA FALSE 298.5841
14 Ackpth NJ FALSE 249.5764
15 Ackpth NY FALSE 276.5504
In meiner Anwendung sieht, wird es für jede Gruppe von Zeilen mit demselben „namen“ genau ein TRUE
in der „wichtigen“ Spalte sein. Ich möchte das df so unterteilen, dass es nur die Zeilen enthält, in denen der Status dem Status der "wichtigen" Zeile entspricht (innerhalb jeder "Name" -Gruppe). Mit anderen Worten, ich möchte
name state important girth
1 Ackpth NY TRUE 145.6290
2 Ackpth NY FALSE 267.6902
3 Ackpth NY FALSE 276.5504
4 Dumpf LA TRUE 317.4794
5 Frodzak AL FALSE 148.5870
6 Frodzak AL TRUE 224.8380
bekommen, wenn ich folgendes ausgeführt:
importantState <- function(df) {
impst <- df[df$important, "state"]
if (length(impst) != 1) stop("group does not have one 'important'")
impst
}
stuff %>% group_by(name) %>% do(.[.$state == importantState(.), ])
In dplyr 0.2
bekomme ich genau das, was ich erwarte, dass (die über 6-Zeilensubset). Wenn ich jedoch den exakt gleichen Code unter Verwendung von dplyr 0.3.0.2
ausführe, wird das gesamte ursprüngliche df zurückgegeben (alle 15 Zeilen).
Ich schaute auf die 0.3 Release Notes auf Github, aber ich sehe nichts, das auf eine Änderung in der inhaltlichen Verhalten in do
beziehen würde.
Kann mir jemand helfen, wenigstens ein wenig von meiner Vernunft wiederzuerlangen, indem ich erkläre, was im Himmel hier vor sich geht? Oder irgendwelche Ideen für eine kreative Arbeit, an die ich nicht gedacht habe?
Vielleicht verstehe ich nicht, aber warum verwenden Sie 'Filter' nicht dafür? –
Gute Frage :-) Ich denke, mein dicker Kopf hat nicht gemerkt, dass du es so machen kannst ... – NumerousHats