我有一个包含100列的数据框。每列代表一个概率值。
我想在那里进行缩放,我正在使用以下转换:
df <- df %>%
mutate_at(vars(specific_columns),
funs(function(x) {((x - min(x)) / (max(x) - min(x)))}))
但它没有效果,也没有产生我想要的输出。
例如,样本数据是:
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
错误:
mutate_impl(.data,dots)中的错误:列
col1
不受支持 类型函数
答案 0 :(得分:2)
请尝试使用以下语法:
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
funs()
将为您解释伪函数。它有助于处理两个无法正常工作的案例:
如果您已经声明了自己的(匿名)功能,则无需使用funs()
,因为mutate_at()
将按原样接受此功能:
mutate_at(df, vars(everything()), function(x) {((x - min(x)) / (max(x) - min(x)))})
或
my_func <- function(x) {((x - min(x)) / (max(x) - min(x)))}
mutate_at(df, vars(everything()), my_func)