【问题标题】:mutate_at in R with lambda function?带有lambda函数的R中的mutate_at?
【发布时间】:2018-10-23 03:12:24
【问题描述】:

我有一个包含 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 不受支持 类型函数

【问题讨论】:

    标签: r dataframe dplyr scaling


    【解决方案1】:

    试试这个语法:

    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() 将为您解释一个伪函数。它有助于处理两种无法正常工作的情况:

    1. 函数的字符名称(例如“mean”)
    2. 使用 . 调用函数。作为一个虚拟参数(在我的例子中)

    如果您已经声明了自己的(匿名)函数,则无需使用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)
    

    【讨论】:

    • 这正是我自己玩的。非常感谢。但真正的问题是为什么 lambda 函数不起作用?
    • 对不起!我已经更新了答案以进一步解释:)
    • 非常感谢!解决了我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2016-10-13
    • 1970-01-01
    • 2020-01-27
    • 2020-07-04
    • 1970-01-01
    相关资源
    最近更新 更多