Мы можем преобразовать строку в символ и затем оценить (!!
)
library(tidyverse)
mtcars %>%
mutate(var2 = if_else(!! rlang::sym(var1) >20, 1, 0))
. ifelse
здесь не требуется, так как as.integer
может привести ИСТИНА / ЛОЖЬ к 1/0
mtcars %>%
mutate(var2 = as.integer(!! rlang::sym(var1) >20))
Для второго фрагмента кода мы можем использовать [[
вместо $
для извлечения столбца
as.numeric(mtcars[[var1]])
Если есть сомненияо выражении с кавычками используйте qq_show
, чтобы понять основную проблему
rlang::qq_show(mtcars %>%
mutate(var2 = if_else(!!quo(var1) >20, 1, 0)))
#mtcars %>% mutate(var2 = if_else((^var1) > 20, 1, 0))
и теперь с преобразованием символов
rlang::qq_show( mtcars %>%
mutate(var2 = if_else(!! rlang::sym(var1) >20, 1, 0)))
#mtcars %>% mutate(var2 = if_else(mpg > 20, 1, 0))
Обратите внимание, что в первом случае оно оценивается как 'var1'а не столбец' mpg '