如何使用 fct_relevel 和 mutate_at 语法
How to use fct_relevel with mutate_at syntax
我想重新调整数据集中的因素,但是我真的很难使用 fct_relevel 语法并将其与 mutate_at 一起使用。我收到一系列关于我的数据不是一个因素的错误。
解决方案必须允许我重新调整多个因素(实际数据集有 20 多个因素以不同的方式重新调整)
似乎应该可以工作,但我显然没有正确掌握语法。我哪里错了?
这是一个例子:
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 中的未知水平
如果有人指出我确定的明显错误,我将不胜感激。
这应该有效
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
我们可以指定为
library(forcats)
dat <- dat %>%
mutate_at(.vars = vars (x1:x2),
fct_relevel, c("c", "b", "a"))
我想重新调整数据集中的因素,但是我真的很难使用 fct_relevel 语法并将其与 mutate_at 一起使用。我收到一系列关于我的数据不是一个因素的错误。
解决方案必须允许我重新调整多个因素(实际数据集有 20 多个因素以不同的方式重新调整)
这是一个例子:
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 中的未知水平
如果有人指出我确定的明显错误,我将不胜感激。
这应该有效
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
我们可以指定为
library(forcats)
dat <- dat %>%
mutate_at(.vars = vars (x1:x2),
fct_relevel, c("c", "b", "a"))