Widzę coś, co wygląda dziwnie w funkcji do
w dplyr
0.3.0.2, ale może coś nie rozumiem.nieparzyste zachowanie funkcji do() w dplyr
Mam ramki danych, który wygląda jak
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
W mojej aplikacji, nie będzie dokładnie jeden TRUE
w kolumnie „ważne” dla każdej grupy wierszy o tej samej „name”. Chcę podzbiór pliku df, tak aby zawierał tylko te wiersze, w których stan pasuje do stanu "ważnego" wiersza (w obrębie każdej grupy "nazwa"). Innymi słowy, chcę dostać
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
Jeżeli uruchomić następujące:
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(.), ])
w dplyr 0.2
dostać dokładnie to, czego się spodziewać (powyżej 6-podzbiór wierszy). Jeśli jednak uruchomię dokładnie ten sam kod przy użyciu dplyr 0.3.0.2
, zwróci on cały oryginalny plik df (wszystkie 15 wierszy).
Spojrzałem na uwagi o wersji 0.3 na github, ale nie widzę niczego, co mogłoby się wiązać ze zmianą zachowania merytorycznego w do
.
Czy ktoś może mi pomóc odzyskać choć odrobinę zdrowia psychicznego, wyjaśniając, co się tu dzieje w niebie? Albo jakieś pomysły na twórczą pracę, o której nie myślałem?
Może nie rozumiem, ale dlaczego nie używasz do tego celu filtru? –
Dobre pytanie :-) Myślę, że moja gęsta głowa nie zdawała sobie sprawy, że możesz to zrobić w ten sposób ... – NumerousHats