使用NA值将r数据帧缩放到0-1

时间:2015-08-10 17:52:15

标签: r

我见过那些解决方案:

  1. Scaling a numeric matrix in R with values 0 to 1
  2. Range standardization (0 to 1) in R
  3. 但是,如果存在NA值,则该方法无法工作。

    我试过这个:

    s = append(sort(rexp(100)),rep(NA,30))
    o = data.frame(s,s)
    
    range01 <- function(x){
        if (!is.na(x))
        { 
            return(NA)
                        }
        else{
            y =  (x-min(x))/(max(x)-min(x))
            return(y)}
    
    }
    
    xo = apply(o,MARGIN = 2, FUN = range01)
    

    但它不起作用...... 建议?

    解决方案应该通过应用函数

    对数据帧起作用

1 个答案:

答案 0 :(得分:4)

以下是您链接的第二个问题的答案:

function(x) {(x - min(x)) / (max(x) - min(x))}

我们可以对此进行修改以使用NAs(使用min中的内置NA处理和max

stdize = function(x, ...) {(x - min(x, ...)) / (max(x, ...) - min(x, ...))}

然后你可以调用它并通过na.rm = T

x = rexp(100)
x[sample(1:100, size = 10)] <- NA
stdize(x)  # lots of NA
stdize(x, na.rm = T) # works!

或者,使用您问题中的o数据框:

o_std = lapply(o, stdize, na.rm = T)

最后NA仍然存在。