使用mutate_()
我曾经提供了一个新变量列表和创建它们所需的逻辑。
library(dplyr)
library(rlang)
list_new_var <-
list(new_1 = "am * mpg",
new_2 = "cyl + disp")
mtcars %>%
mutate_(.dots = list_new_var) %>%
head()
现在我想过渡到使用整洁的评估。我正在理解新方法。
我该如何使这项工作?通常建议使用函数来解决这种情况吗?
f_mutate <- function(data, new) {
a <- expr(new)
b <- eval(new)
c <- syms(new)
d <- UQ(syms(new))
e <- UQS(syms(new))
f <- UQE(syms(new))
data %>%
mutate(f) %>%
head()
}
f_mutate(mtcars, new = list_new_var)
答案 0 :(得分:3)
一种选择是创建一个list
quote
作为参数返回而不进行评估
list_new_var <-list(
new_1 = quote(am * mpg),
new_2 = quote(cyl + disp)
)
并在f_mutate
内,使用!!!
进行评估
f_mutate <- function(data, new) {
data %>%
mutate(!!! new)
}
运行功能
f_mutate(mtcars, new = list_new_var) %>%
head
# mpg cyl disp hp drat wt qsec vs am gear carb new_1 new_2
#1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 21.0 166
#2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 21.0 166
#3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 22.8 112
#4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 0.0 264
#5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 0.0 368
#6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 0.0 231
答案 1 :(得分:0)
我认为你不需要这个功能。我想你只需要以下
library(dplyr)
mtcars %>%
as_tibble() %>%
mutate(new_column1 = am * mpg,
new_column2 = cyl + disp) %>%
head()
查看第一个示例here。