2014-11-29 9 views
18

Załóżmy, że mam następujący kod. W ostatnim kroku, gdy próbuję go zorganizować, kod nie działa, a ramka danych jest nadal ułożona w porządku rosnącym przez cyl.aranżacja() nie działa w zgrupowanych ramkach danych

library(dplyr) 
# create a grouped data frame 
df <- group_by(mtcars,cyl) 
# rank car from best mpg to worst for every cyl 
df <- mutate(df,rank = row_number(mpg)) 
# top 3 best mpg for each cyl 
df <- filter(df,rank <= 3) 
# arrange by the number of cyl 
df <- arrange(df,desc(cyl), rank) 

Jakieś przemyślenia na temat tego, dlaczego tak się dzieje?

Odpowiedz

26

To nie działa, ponieważ musisz ungroup() danych przed aranżacji przez cyl. Kod, którego używasz, próbuje zamówić kolumnę cyl, gdy jest jeszcze pogrupowana według cyl. Ponieważ wartości te są takie same (w obrębie każdej grupy) nic się nie zmienia.

Aby uporządkować wszystkie dane według cyl po rankingu, najpierw musimy usunąć grupę, a następnie ponownie uruchomić arrange().

library(dplyr) 

group_by(mtcars, cyl) %>%    ## group by cylinder 
    mutate(rank = row_number(mpg)) %>% ## rank by mpg 
    filter(rank <= 3) %>%    ## top three for each cyl 
    arrange(rank) %>%     ## arrange each group by rank 
    ungroup() %>%      ## remove grouping 
    arrange(desc(cyl))     ## arrange all by cylinder (descending) 

# mpg cyl disp hp drat wt qsec vs am gear carb rank 
# 1 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 1 
# 2 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 2 
# 3 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 3 
# 4 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 1 
# 5 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 2 
# 6 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 3 
# 7 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 1 
# 8 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 2 
# 9 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 3 

Na marginesie, polecam, że należy rozważyć użycie funkcji %>% do łączenia tych połączeń razem, ponieważ będzie ona znacznie obniżyć zadań wykonanych z <-.

+1

podobny post http://stackoverflow.com/questions/26555297/dplyr-arrange-a-grouped-df-by-group-variable-not-working – hshihab

Powiązane problemy