Попробуйте этот синтаксис вместо:
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)