Vedo quello che sembra uno strano comportamento della funzione do
in dplyr
0.3.0.2, ma forse sto fraintendendo qualcosa.comportamento anomalo della funzione do() in dplyr
Ho un frame di dati che assomiglia
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
Nella mia domanda, ci sarà esattamente un TRUE
nella colonna "importante" per ogni gruppo di righe con lo stesso "nome". Voglio suddividere il df in modo tale da includere solo le righe in cui lo stato corrisponde allo stato della riga "importante" (all'interno di ciascun gruppo "nome"). In altre parole, voglio ottenere
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
Se corro il seguente:
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
ottengo esattamente quello che mi aspetto (sopra sottoinsieme 6-fila). Tuttavia, se eseguo lo stesso identico codice utilizzando dplyr 0.3.0.2
, restituisce l'intero file originale df (tutte le 15 righe).
Ho guardato le note di rilascio di 0.3 su github, ma non vedo nulla che possa riguardare un cambiamento nel comportamento sostanziale in do
.
Qualcuno può aiutarmi a recuperare almeno un po 'della mia sanità mentale spiegando cosa sta succedendo in cielo? O qualche idea per un lavoro creativo intorno a cui non ho pensato?
Forse non sto capendo, ma perché non stai usando 'filtro' per questo? –
Buona domanda :-) Immagino che la mia testa grossa non si rendesse conto che potevi farlo in quel modo ... – NumerousHats