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

时间:2020-01-11 00:41:54

标签: r dplyr

我一直在阅读this帖子,内容涉及如何使用对dplyr中变量的字符串引用。

我想基于字符串输入来更改现有的列:

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

错误:出现意外的“ =”: “ 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))

1 个答案:

答案 0 :(得分:6)

可以在评估(:=的同时使用!!进行此操作,并使用转换为sym bol并评估分配的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)