【问题标题】:How to use fct_relevel with mutate_at syntax如何使用 fct_relevel 和 mutate_at 语法
【发布时间】:2019-05-08 08:29:59
【问题描述】:

我想重新调整数据集中的因素,但是我真的很努力使用 fct_relevel 语法并将其与 mutate_at 一起使用。我收到一系列关于我的数据不是一个因素的错误。

解决方案必须允许我重新调整多个因素(实际数据集有 20 多个因素需要以不同方式重新调整)

This answer 似乎应该可以工作,但我显然没有正确掌握语法。我哪里错了?

这是一个例子:

library(tidyverse)

dat <- tibble (x1 = c("b", "b", "a", "c", "b"),
               x2 = c("c", "b", "c", "a", "a"),
               y = c(10, 5, 12, 3, 4)) %>% 
  mutate_at(.vars = vars(x1:x2), factor)

我肯定在处理因素

sapply(dat, class)

但我无法重新升级 x1,我收到以下错误:f must be a factor (or character vector))

dat %>% fct_relevel(x1, "c", "b", "a")

这就是我理想中想要做的事情

dat2 <- dat %>% 
  mutate_at(.vars = vars (x1:x2),
            .funs = fct_relevel("c", "b", "a"))

目前最后一组给了我以下错误:

错误:无法创建对不可调用对象的调用

致电rlang::last_error()查看回溯

另外:警告信息:

f: b, a 中的未知级别

如果有人指出我确信这是一个明显的错误,我将不胜感激。

【问题讨论】:

    标签: r dplyr forcats


    【解决方案1】:

    这应该可以工作

    library(dplyr)                     
    library(forcats)
    
    dat <- dat %>% mutate_at(vars(x1:x2), ~fct_relevel(., c("c", "b", "a")))
    
    dat$x1
    #[1] b b a c b
    #Levels: c b a
    dat$x2
    #[1] c b c a a
    #Levels: c b a
    

    【讨论】:

    • 是的!非常感谢 - 我知道它最终会很简单。
    【解决方案2】:

    我们可以指定它

    library(forcats)
    dat <- dat %>% 
           mutate_at(.vars = vars (x1:x2),
                fct_relevel, c("c", "b", "a"))
    

    【讨论】:

    • Akrun,我认为这与我的回答没有什么不同。最近,我观察到您发布的答案几乎相似,但对帖子没有任何附加价值。
    • @RonakShah 好吧,它与您的帖子不同,因为我发布的帖子没有任何匿名功能
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多