在 Tidyverse 中重新编码多个变量 "with mutate_at" 之间的相同因子水平值
Recode same factor levels values among multiple variables "with mutate_at" in Tidyverse
我有几个值为“1”和“2”的因子变量需要重新编码为 "Yes" 和 "No"。 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 中是否有更好的方法来重新编码多个变量的相同因子水平,这是整理数据中非常常见的任务。
问题是您在 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
我有几个值为“1”和“2”的因子变量需要重新编码为 "Yes" 和 "No"。 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 中是否有更好的方法来重新编码多个变量的相同因子水平,这是整理数据中非常常见的任务。
问题是您在 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