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是不受支持的类型函数
尝试使用以下语法:
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()将为您解释伪函数。它有助于处理两种无法正常使用的情况:
如果您已经声明了自己的(匿名)函数,则无需使用,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)