我已经看到了这些解决方案:
但是,如果存在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函数在数据框上工作
这是您链接的第二个问题的答案:
function(x) {(x - min(x)) / (max(x) - min(x))}
Run Code Online (Sandbox Code Playgroud)
我们可以修改这个工作与NAS(使用内置的NA在处理min和max
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旨意依然存在底。