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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Tidyverse中使用“mutate_at”在多个变量中重新编码相同的因子水平值相关的知识,希望对你有一定的参考价值。

我有几个因子变量,值“1”和“2”需要重新编码为“是”和“否”。使用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中有更好的方法可以在多个变量上重新编码相同的因子水平,这是整理数据的一个非常常见的任务。

答案

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

以上是关于在Tidyverse中使用“mutate_at”在多个变量中重新编码相同的因子水平值的主要内容,如果未能解决你的问题,请参考以下文章

R语言dplyr包mutate_at函数通过名称修改指定数据列的内容(使用统一的函数)实战

如何在 r 中使用 tidyverse 管道运算符复制相同的表达式?

在 R 中使用 openxlsx 进行条件格式化的 Tidyverse/更快的解决方案?

在 docker (tidyverse) 中挂载 R/RStudio 可访问的本地卷

在 R 中的函数中创建和使用新变量:tidyverse 中的 NSE 编程错误

使用 tidyverse + sf R 创建每个多边形的线密度