R中带有lambda函数的mutate_at?

Ste*_*veS 4 scaling r dataframe dplyr

我有一个100列的数据框。每列代表一个概率值。

我想在那里缩放并使用以下转换:

df <- df %>%
      mutate_at(vars(specific_columns), 
                funs(function(x) {((x - min(x)) / (max(x) - min(x)))}))
Run Code Online (Sandbox Code Playgroud)

但这不起作用,也不会产生我想要的输出。

例如,样本数据为:

col1        col2        col3        col4        col5        
0.014492754 0.014492754 0.014492754 0.014492754 0.014492754 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
0.028985507 0.028985507 0.028985507 0.028985507 0.028985507 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
0.014492754 0.014492754 0.014492754 0.014492754 0.014492754 
0.014492754 0.014492754 0.014492754 0.014492754 0.014492754 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
0.010989011 0.010989011 0.010989011 0.010989011 0.010989011 
0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 
Run Code Online (Sandbox Code Playgroud)

错误:

mutate_impl(.data,点)中的错误:列col1是不受支持的类型函数

rua*_*dhw 5

尝试使用以下语法:

library(dplyr)
df %>% mutate_at(vars(everything()), funs(((. - min(.)) / (max(.) - min(.)))))
#>         col1      col2      col3      col4      col5
#> 1  0.5000000 0.5000000 0.5000000 0.5000000 0.5000000
#> 2  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> 3  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> 4  1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
#> 5  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> 6  0.5000000 0.5000000 0.5000000 0.5000000 0.5000000
#> 7  0.5000000 0.5000000 0.5000000 0.5000000 0.5000000
#> 8  0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> 9  0.3791209 0.3791209 0.3791209 0.3791209 0.3791209
#> 10 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
Run Code Online (Sandbox Code Playgroud)

funs()将为您解释伪函数。它有助于处理两种无法正常使用的情况:

  1. 函数的字符名称(例如“均值”)
  2. 使用调用函数。作为虚拟参数(如我的示例)

如果您已经声明了自己的(匿名)函数,则无需使用,funs()因为mutate_at()它将按原样接受:

mutate_at(df, vars(everything()), function(x) {((x - min(x)) / (max(x) - min(x)))})
Run Code Online (Sandbox Code Playgroud)

要么

my_func <- function(x) {((x - min(x)) / (max(x) - min(x)))}
mutate_at(df, vars(everything()), my_func)
Run Code Online (Sandbox Code Playgroud)