Перекодировать одинаковые значения уровней факторов среди нескольких переменных "с mutate_at" в Tidyverse

У меня есть несколько факторных переменных со значениями "1" и "2", которые необходимо перекодировать в "Да" и "Нет". Tidyverse mutate_at с fct_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_at, vars или fct_recode? Есть ли лучший способ в tidyverse перекодировать одинаковые уровни факторов для нескольких переменных, что является очень распространенной задачей при приведении в порядок данных.

1 ответ

Решение

Проблема в том, что ваш синтаксис в 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
Другие вопросы по тегам