首页 > 解决方案 > 在 dplyr::mutate 中传递一个字符串作为变量名

问题描述

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

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

var <- 'vs'
my_mtcars <- mtcars %>% 
  mutate(get(var) = factor(get(var)))

错误:意外'=' in:“my_mtcars <- mtcars %>% mutate(get(var) =

也试过:

my_mtcars <- mtcars %>% 
  mutate(!! rlang::sym(var) = factor(!! rlang::symget(var)))

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

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

# works
my_mtcars <- mtcars %>% 
  mutate(vs = factor(vs))

标签: rdplyr

解决方案


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

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

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

my_mtcars2 <- mtcars %>% 
                    mutate_at(vars(var), factor)

推荐阅读