Ответ 1
Он не работает, потому что вам нужно ungroup()
данные перед установкой cyl
. Код, который вы используете, пытается упорядочить столбец 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
В качестве побочного примечания я бы рекомендовал вам использовать функцию %>%
для объединения этих вызовов вместе, поскольку она значительно сократит назначение, сделанное с помощью <-
.