我想对数据进行分组,然后排列表格,以便首先显示具有最高值的组。例如。在 mtcars 数据集中,我想按气缸数对汽车进行分组,然后排列表格,以便具有最高平均值的组mpg
首先显示
mtcars %>% group_by (cyl) %>% arrange (desc(mean (mpg)))
这会产生一个错误:
Error: incorrect size (1) at position 1, expecting : 32
我问的原因是,在 group_by() 之后应用时,filter() 应用于整个组,而不是单个行。
一个好方法是将分组变量转换为factor
并使用reorder
(or 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)
像这样更改数据很好,因为您指定的顺序将被其他函数记住并使用(例如对条形或面进行排序)ggplot
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)