2014-11-29 2 views
18

다음 코드가 있다고 가정합니다. 마지막 단계에서 배열을 시도하면 코드가 작동하지 않고 데이터 프레임이 cyl에 의해 오름차순으로 정렬됩니다.그룹화 된 데이터 프레임에서 배열 작업을 수행하지 않음

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) 

왜 이런 일이 발생했는지 생각해보십시오.

답변

26

cyl으로 정렬하기 전에 데이터를 ungroup()해야하기 때문에 작동하지 않습니다. 사용중인 코드가 cyl으로 그룹화되어있는 동안 cyl 열을 주문하려고합니다. 이러한 값은 (그룹 내에서) 모두 동일하기 때문에 아무 것도 변경되지 않습니다.

순위를 매기고 cyl 전체 데이터를 정렬하려면 그룹화를 먼저 제거한 다음 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 

는 보조 노트로서, 나는 당신이 그것을 상당히 <-로 만든 할당을 줄일 것으로 함께 이러한 호출 체인의 %>% 기능을 사용하여 고려하는 것이 좋습니다 것입니다.

+1

비슷한 게시물 http://stackoverflow.com/questions/26555297/dplyr-arrange-a-grouped-df-by-group-variable-not-working – hshihab

관련 문제