我正在尝试根据来自另一个变量的一些值来更改因子的级别。我将在一个示例中展示它。我有这样一张桌子:
library(tidyverse)
set.seed(1)
df = tibble(
group = factor(rep(c("a", "b", "c", "d"), each = 5)),
x = c(rnorm(5, 0, 1), rnorm(5, 0, 2), rnorm(5, 0, 1.5), rnorm(5, 0, 3))
)我想在变量x的标准差的减小值中改变group因子的水平。
我设法做到了这一点:
lev = df %>% group_by(group) %>%
summarise(sd = sd(x)) %>%
arrange(desc(sd))
df = df %>% mutate(group = fct_relevel(group, as.character(lev$group)))但是,我不喜欢这个解决方案,因为它需要创建一个辅助lev表,这是我希望避免的。有没有人知道如何以一种更简单、更透明的方式实现这种效果,这是典型的dplyr语义。
发布于 2021-10-27 17:10:38
你要找的是forcats::fct_reorder()
df = df %>% mutate(group = fct_reorder(group, x, sd, .desc = TRUE))
df %>% group_by(group) %>% summarise(sd=sd(x))https://stackoverflow.com/questions/69726252
复制相似问题