gpt4 book ai didi

r - 在 dplyr::funs 的命名参数中,我可以引用其他参数的名称吗?

转载 作者:行者123 更新时间:2023-12-04 07:31:10 24 4
gpt4 key购买 nike

考虑以下:

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(.)))

有没有办法避免调用 meansd通过引用 avg 两次和 dev列。我的想法是
df %>% 
mutate_all(funs(avg = mean(.), dev = sd(.), scaled = (. - avg) / dev))

显然这行不通,因为没有列 avgdev , 但是 x_avg , x_dev , y_avg , y_dev , ETC。

有没有好办法,内 funs使用 rlang以编程方式创建这些列引用的工具,以便我可以将由先前命名参数创建的列引用到 funs (当 .x 时,我会引用 x_meanx_dev 来计算 x_scaled 等等)?

最佳答案

我认为如果您将数据转换为长格式会更容易

library(tidyverse)

set.seed(111)
df <- tibble(x = rnorm(100), y = rnorm(100, 10, 2), z = x * y)

df %>%
gather(key, value) %>%
group_by(key) %>%
mutate(avg = mean(value),
sd = sd(value),
scaled = (value - avg) / sd)
#> # A tibble: 300 x 5
#> # Groups: key [3]
#> key value avg sd scaled
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 x 0.235 -0.0128 1.07 0.232
#> 2 x -0.331 -0.0128 1.07 -0.297
#> 3 x -0.312 -0.0128 1.07 -0.279
#> 4 x -2.30 -0.0128 1.07 -2.14
#> 5 x -0.171 -0.0128 1.07 -0.148
#> 6 x 0.140 -0.0128 1.07 0.143
#> 7 x -1.50 -0.0128 1.07 -1.39
#> 8 x -1.01 -0.0128 1.07 -0.931
#> 9 x -0.948 -0.0128 1.07 -0.874
#> 10 x -0.494 -0.0128 1.07 -0.449
#> # ... with 290 more rows

创建于 2018-11-04 由 reprex package (v0.2.1.9000)

关于r - 在 dplyr::funs 的命名参数中,我可以引用其他参数的名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53143522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com