Перекодировать одинаковые значения уровней факторов среди нескольких переменных "с 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