mutate_at 在 R 中使用 lambda 函数?
mutate_at in R with lambda function?
我有一个包含 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
错误:
Error in mutate_impl(.data, dots) : Column col1
is of unsupported
type function
试试这个语法:
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()
将为您解释 一个伪函数。它有助于处理两种无法正常工作的情况:
- 函数的字符名称(例如"mean")
- 使用 调用一个函数。作为虚拟参数(如我的示例)
如果您已经声明了自己的(匿名)函数,则无需使用 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)
我有一个包含 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
错误:
Error in mutate_impl(.data, dots) : Column
col1
is of unsupported type function
试试这个语法:
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()
将为您解释 一个伪函数。它有助于处理两种无法正常工作的情况:
- 函数的字符名称(例如"mean")
- 使用 调用一个函数。作为虚拟参数(如我的示例)
如果您已经声明了自己的(匿名)函数,则无需使用 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)