在 Tidyverse 中重新编码多个变量 "with mutate_at" 之间的相同因子水平值

Recode same factor levels values among multiple variables "with mutate_at" in Tidyverse

我有几个值为“1”和“2”的因子变量需要重新编码为 "Yes" 和 "No"。 Tidyverse mutate_atfct_recode 似乎是正确的工具。然而,

dataframe %>%
 mutate_at(vars (var1, var9, var17) =
              fct_recode(vars(var1, var9, var17), 
                         "Yes" = "1",
                         "No" = "2"))

给予

Error: unexpected ')' in:
"                         "Yes" = "1",
                         "No" = "2"))"

并且,

dataframe %>%
 mutate_at(vars (var1, var9, var17), 
              funs(fct_recode(vars(var1, var9, var17), 
                         "Yes" = "1",
                         "No" = "2")))

给予

Error: `f` must be a factor (or character vector).

有人可以指出我的错误还是我应该使用 mutate_atvarsfct_recode错了吗? tidyverse 中是否有更好的方法来重新编码多个变量的相同因子水平,这是整理数据中非常常见的任务。

问题是您在 mutate_at() 中的语法。

library(dplyr)

首先,我创建了一个示例数据集:

set.seed(666)
dataframe <- data.frame(var1 = sample(c("1", "2"), 5, replace = TRUE),
                        var9 = sample(c("1", "2"), 5, replace = TRUE),
                        var17 = sample(c("1", "2"), 5, replace = TRUE))

  var1 var9 var17
1    2    2     2
2    1    2     1
3    2    1     1
4    1    1     1
5    1    1     1

然后我这样使用mutate_at().vars不变,但.funs只是函数,funs的附加参数传入...:

dataframe %>% 
  mutate_at(.vars = vars(var1, var9, var17),
            .funs = forcats::fct_recode,
            "Yes" = "1",
            "No" = "2")

最终结果:

  var1 var9 var17
1   No   No    No
2  Yes   No   Yes
3   No  Yes   Yes
4  Yes  Yes   Yes
5  Yes  Yes   Yes