N S*_*ors 2 r dplyr tidyverse forcats
我有几个因子变量,值"1"和"2"需要重新编码为"是"和"否".Tidyverse mutate_at与fct_recode似乎是合适的工具.然而,
dataframe %>%
mutate_at(vars (var1, var9, var17) =
fct_recode(vars(var1, var9, var17),
"Yes" = "1",
"No" = "2"))
Run Code Online (Sandbox Code Playgroud)
给
Error: unexpected ')' in:
" "Yes" = "1",
"No" = "2"))"
Run Code Online (Sandbox Code Playgroud)
和,
dataframe %>%
mutate_at(vars (var1, var9, var17),
funs(fct_recode(vars(var1, var9, var17),
"Yes" = "1",
"No" = "2")))
Run Code Online (Sandbox Code Playgroud)
给
Error: `f` must be a factor (or character vector).
Run Code Online (Sandbox Code Playgroud)
有人可以指出我的错误,还是使用mutate_at,vars或fct_recode错误?在tidyverse中有更好的方法可以在多个变量上重新编码相同的因子水平,这是整理数据的一个非常常见的任务.
问题是你的语法mutate_at().
library(dplyr)
Run Code Online (Sandbox Code Playgroud)
首先,我创建一个示例数据集:
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
Run Code Online (Sandbox Code Playgroud)
然后我mutate_at()像这样使用:.vars不变,但.funs只是函数,funs传入的附加参数...:
dataframe %>%
mutate_at(.vars = vars(var1, var9, var17),
.funs = forcats::fct_recode,
"Yes" = "1",
"No" = "2")
Run Code Online (Sandbox Code Playgroud)
最终结果:
var1 var9 var17
1 No No No
2 Yes No Yes
3 No Yes Yes
4 Yes Yes Yes
5 Yes Yes Yes
Run Code Online (Sandbox Code Playgroud)