data是一个data.frame,包含:date,a,b,c,d列。最后4个是数字
Y.columns <- c("a")
X.columns <- c("b","c","d")
我需要什么:
data.mutated <- data %>%
mutate(Y = a, X = b+c+d) %>%
select(date,Y,X)
但我想从字符向量传递mutate参数, 我尝试了以下方法:
Y.string <- paste(Y.columns, collapse='+')
X.string <- paste(X.columns, collapse='+')
data.mutated <- data %>%
mutate(Y = UQ(Y.string), X = UQ(X.string)) %>%
select(date,Y,X)
但它没有用。任何帮助表示赞赏。
答案 0 :(得分:2)
要将tidyeval与UQ
一起使用,您需要首先使用parse_quosure
中的rlang
将表达式解析为句子(例如,使用mtcars
,因为OP的问题不是可再现的):
Y.columns <- c("cyl")
X.columns <- c("disp","hp","drat")
Y.string <- paste(Y.columns, collapse='+')
X.string <- paste(X.columns, collapse='+')
library(dplyr)
library(rlang)
mtcars %>%
mutate(Y = UQ(parse_quosure(Y.string)),
X = UQ(parse_quosure(X.string))) %>%
select(Y,X)
或!!
:
mtcars %>%
mutate(Y = !!parse_quosure(Y.string),
X = !!parse_quosure(X.string)) %>%
select(Y,X)
<强>结果:强>
Y X
1 6 273.90
2 6 273.90
3 4 204.85
4 6 371.08
5 8 538.15
6 6 332.76
7 8 608.21
8 4 212.39
9 4 239.72
10 6 294.52
...
注意:强>
mutate_
现已弃用,因此我认为使用quosure
和UQ
的tidyeval是新方法。