我见过那些解决方案:
但是,如果存在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)
但它不起作用...... 建议?
解决方案应该通过应用函数
对数据帧起作用答案 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
仍然存在。