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

Kae*_*vas 0 r

我已经看到了这些解决方案:

  1. 在R中将数值矩阵缩放为0到1
  2. R中的范围标准化(0到1)

但是,如果存在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)
Run Code Online (Sandbox Code Playgroud)

但这不起作用...建议吗?

该解决方案应通过apply函数在数据框上工作

Gre*_*gor 5

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

function(x) {(x - min(x)) / (max(x) - min(x))}
Run Code Online (Sandbox Code Playgroud)

我们可以修改这个工作与NAS(使用内置的NA在处理minmax

stdize = function(x, ...) {(x - min(x, ...)) / (max(x, ...) - min(x, ...))}
Run Code Online (Sandbox Code Playgroud)

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

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

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

o_std = lapply(o, stdize, na.rm = T)
Run Code Online (Sandbox Code Playgroud)

NA旨意依然存在底。