2015-09-07 10 views
5

Muszę zabraknąć czegoś o tym, jak pozbyć się poziomów w dplyr. W poniższym przykładzie, grupa przez 2 kolumny, podsumować wartości do jednej zmiennej, a następnie sortować według tej nowej zmiennej:dplyr: Rozmieść się nie zachowywać zgodnie z oczekiwaniami po group_by i podsumuj

mtcars %>% group_by(cyl, gear) %>% 
    summarize(hp_range = max(hp) - min(mpg)) %>% 
    arrange(desc(hp_range)) 

# Source: local data frame [8 x 3] 
# Groups: cyl [3] 
# 
# cyl gear hp_range 
# (dbl) (dbl) (dbl) 
#1  4  4 87.6 
#2  4  5 87.0 
#3  4  3 75.5 
#4  6  5 155.3 
#5  6  4 105.2 
#6  6  3 91.9 
#7  8  5 320.0 
#8  8  3 234.6 

Oczywiście to nie jest posortowana według hp_range zgodnie z przeznaczeniem. czego mi brakuje?

EDYCJA: Przykład działa zgodnie z oczekiwaniami bez wywołania desc w aranżacji. Nadal nie wiadomo, dlaczego?

Odpowiedz

8

Ok, tylko dostał się do dołu to:

  1. Wezwanie do desc miał żadnego wpływu, to był przypadek, że przykład nie działa bez niego
  2. kluczem jest, że kiedy group_by wiele kolumn, wydaje się, że wyniki są automatycznie sortowane według grup. W powyższym przykładzie jest sortowane według cyl. Aby uzyskać zamierzony rodzaj całej tabeli danych, należy najpierw ungroup a następnie arrange

    mtcars %>% group_by(cyl, gear) %>% 
        summarize(hp_range = max(hp) - min(mpg)) %>% 
        ungroup() %>% 
        arrange(hp_range) 
    
+0

Chciałem tylko powiedzieć, że na wszystkie pytania i odpowiedzi do tej pory w tym miejscu były bardzo dobre. Dobre jasne wyjaśnienia wraz z powtarzalnymi przykładami. Więc dziękuję! –

Powiązane problemy