在 dplyr::mutate 中传递字符串作为变量名

Dou*_*Fir 1 r dplyr

我一直在阅读这篇关于如何使用 dplyr 中变量的字符串引用的文章。

我想根据字符串输入改变现有列:

var <- 'vs'
my_mtcars <- mtcars %>% 
  mutate(get(var) = factor(get(var)))
Run Code Online (Sandbox Code Playgroud)

错误:意外的“=”:“my_mtcars <- mtcars %>% mutate(get(var) ="

还尝试过:

my_mtcars <- mtcars %>% 
  mutate(!! rlang::sym(var) = factor(!! rlang::symget(var)))
Run Code Online (Sandbox Code Playgroud)

这导致了完全相同的错误消息。

如何根据在 var 变量中传递字符串“vs”进行变异来执行以下操作?

# works
my_mtcars <- mtcars %>% 
  mutate(vs = factor(vs))
Run Code Online (Sandbox Code Playgroud)

akr*_*run 7

此操作可以通过:=whilevaluing( !!) 并使用转换为symbol 并评估赋值的 rhs 来执行

library(dplyr)
my_mtcars <- mtcars %>% 
       mutate(!! var  := factor(!! rlang::sym(var)))
class(my_mtcars$vs)
#[1] "factor"
Run Code Online (Sandbox Code Playgroud)

或者不用想太多,使用mutate_at,它可以接受字符串vars并应用function感兴趣的

my_mtcars2 <- mtcars %>% 
                    mutate_at(vars(var), factor)
Run Code Online (Sandbox Code Playgroud)