如何在tidyverse中使用to_factor参数?mutate_at调用报错求替代语法
解决
mutate_at中调用to_factor带参数的错误问题 我来帮你搞定这个问题~你遇到的错误是因为在mutate_at里直接调用带参数的to_factor时,函数会立刻执行而不是被应用到每个目标变量上,自然就会提示缺少x参数啦。下面给你几个可行的替代方案:
方案1:使用匿名函数
直接定义一个匿名函数,把每个目标变量作为参数传给to_factor,同时带上你需要的参数:
library(tidyverse) library(labelled) df <- data.frame( a = labelled(c(1, 1, 2, 3), labels = c(No = 1, Yes = 2)), b = labelled(c(1, 1, 2, 3), labels = c(No = 1, Yes = 2, DK = 3)) ) # 使用匿名函数传递参数 glimpse(df %>% mutate_at(vars(a:b), function(x) to_factor(x, drop_unused_labels=TRUE, ordered=TRUE)))
运行结果:
Rows: 4
Columns: 2
$ aNo, No, Yes, 3
$ bNo, No, Yes, DK
方案2:使用purrr::partial简化写法
如果你不想写完整的匿名函数,可以用purrr的partial函数预先绑定好to_factor的参数,再传给mutate_at,写法更简洁:
# purrr已包含在tidyverse中,无需额外加载 glimpse(df %>% mutate_at(vars(a:b), partial(to_factor, drop_unused_labels=TRUE, ordered=TRUE)))
这个方案的运行效果和方案1完全一致。
方案3:使用dplyr官方推荐的across语法
mutate_at属于dplyr的旧版语法,现在官方更推荐使用across来替代,写法更直观清晰:
glimpse(df %>% mutate(across(a:b, ~to_factor(.x, drop_unused_labels=TRUE, ordered=TRUE))))
这里的~是公式形式的函数,.x代表每个被处理的变量,同样能实现你想要的因子转换效果。
内容的提问来源于stack exchange,提问作者sbac
相关产品推荐
相关产品推荐

