我想对数据进行分组,然后排列表格,以便首先显示具有最高值的组。例如,在 mtcars 数据集中,我想按气缸数对汽车进行分组,然后排列表格,以便mpg首先显示平均值最高的组
mtcars %>% group_by (cyl) %>% arrange (desc(mean (mpg)))
Run Code Online (Sandbox Code Playgroud)
这会产生一个错误:
Error: incorrect size (1) at position 1, expecting : 32
Run Code Online (Sandbox Code Playgroud)
我问的原因是,在 group_by() 之后应用时,filter() 应用于整个组,而不是单个行。
一个好方法是将分组变量转换为 afactor并使用reorder(或forcats::fct_reorder) 来控制级别的顺序。然后你就可以arrange通过该栏。(分组隐含在reorder函数中。)
library(dplyr)
mtcars %>%
mutate(
cyl = reorder(factor(cyl), -mpg)
# stats::reorder, built-in, uses mean by default
# use -mpg to make it descending
) %>%
arrange(cyl)
# alternately
library(forcats)
mtcars %>%
mutate(
cyl = fct_reorder(factor(cyl), mpg, .fun = mean, .desc = TRUE)
# forcats::fct_reorder, uses median by default,
# takes a .desc argument to make it descending
) %>%
arrange(cyl)
Run Code Online (Sandbox Code Playgroud)
像这样更改数据很好,因为您指定的顺序将被其他函数记住并使用(例如对 a 中的条形或面进行排序ggplot)。
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |