首页 文章

在Tidyverse中使用“mutate_at”在多个变量中重新编码相同的因子水平值

提问于
浏览
1

我有几个因子变量,值"1"和"2"需要重新编码为"Yes"和"No" . 使用fct_recode的Tidyverse mutate_at似乎是正确的工具 . 然而,

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_at,vars或fct_recode错误?在tidyverse中有更好的方法可以在多个变量上重新编码相同的因子水平,这是整理数据的一个非常常见的任务 .

1 回答

  • 5

    问题是 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
    

相关问题