考虑以下内容:
有没有一种避免通过调用
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(.)))
有没有一种避免通过调用
mean
和sd
两次来引用avg
和dev
列的方法?我的想法是这样的:df %>%
mutate_all(funs(avg = mean(.), dev = sd(.), scaled = (. - avg) / dev))
很明显这样是行不通的,因为没有 avg
和 dev
这些列,但有 x_avg
、x_dev
、y_avg
、y_dev
等列。
是否有一种好的方法,在 funs
中使用 rlang
工具以编程方式创建这些列参照,这样我就可以引用前面命名参数创建的列(当 .
是 x
时,我将引用 x_mean
和 x_dev
计算 x_scaled
,依此类推)?
spread
将结果转换回宽格式。 - Artem Sokolov