【问题标题】:Changing the factor level based on the value in a grouped variable using the dplyr and forcats packages使用 dplyr 和 forcats 包根据分组变量中的值更改因子水平
【发布时间】:2023-03-07 03:36:01
【问题描述】:

我正在尝试根据来自另一个变量的某些值来更改因子的水平。我将通过一个例子来展示它。我有这样一张桌子:

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))
)

我想改变group 因子的水平以减小变量x 的标准差值。

我设法得到它:

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 语义特有的更简单和透明的方式实现这种效果。

【问题讨论】:

    标签: r dplyr forcats


    【解决方案1】:

    你要找的是forcats::fct_reorder():

    df = df %>% mutate(group = fct_reorder(group, x, sd, .desc = TRUE))
    df %>% group_by(group) %>% summarise(sd=sd(x))
    

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多