Suppose that I want to create a function to be used within dplyr::mutate()
, and in which I feed a variable name, and within the function, it will extract a particular pattern in the variable name given and create a new variable name out of it, like so:
library(rlang)
library(dplyr)
library(stringr)
library(glue)
myfun <- function(var) {
y <- str_remove(ensym(var), "^.*\\.")
other_var <- glue("Petal.{y}")
if_else(var > 6 | other_var > 3, 1, 0) # What rlang function do I need to apply to other_var here?
}
The problem I'm running into, is how do I use rlang tools to evaluate the new variable name "other_var" within the data frame, such that when I make the call below, it would look at the data within iris$Sepal.Length
and iris$Petal.Length
?
mutate(iris, test = myfun(Sepal.Length))
EDIT: The following solves my immediate problem, but I feel like there's a more elegant way:
myfun <- function(df, x) {
y <- str_remove(ensym(x), "^.*\\.")
other_var <- glue("Petal.{y}")
if_else(x > 6 | df[[other_var]] > 3, 0, 1)
}
mutate(iris, test = myfun(iris, Sepal.Length))