【发布时间】:2019-04-08 04:06:10
【问题描述】:
考虑以下几点:
library(tidyverse)
df <- tibble(x = rnorm(100), y = rnorm(100, 10, 2), z = x * y)
df %>%
mutate_all(funs(avg = mean(.), dev = sd(.), scaled = (. - mean(.)) / sd(.)))
有没有办法通过引用avg 和dev 列来避免调用mean 和sd 两次。我的想法是这样的
df %>%
mutate_all(funs(avg = mean(.), dev = sd(.), scaled = (. - avg) / dev))
显然这行不通,因为没有列avg 和dev,而是x_avg、x_dev、y_avg、y_dev 等。
有没有一种好方法,在funs 中使用rlang 工具以编程方式创建这些列引用,这样我就可以将由先前命名参数创建的列引用到funs(当. 是x,我会参考x_mean 和x_dev 来计算x_scaled,等等)?
【问题讨论】: