R 函数递归删除异常值

R 函数递归删除异常值,r,R,我编写了一个函数来重新去除异常值(对于任何距离其中值3sd的数据点) rm.outlier <- function (var) { has.3sd =1 while (has.3sd>0) { for (l in var) { if ( (l-median(var))> 3*sd(var) & !is.na(l)) { var[var==l] <- NA

我编写了一个函数来重新去除异常值(对于任何距离其中值3sd的数据点)

rm.outlier <- function (var) {
    has.3sd =1
    while (has.3sd>0) {
        for (l in var) {
            if ( (l-median(var))> 3*sd(var) & !is.na(l)) {
                var[var==l] <- NA
            }
        }
        has.3sd <- sum(var > 3*sd(var))
        if (has.3sd==0) {
            break
        }
    }
    return (var)
}
rm.outlier 0){
对于(在var中的l){
如果((l-中值(var))>3*sd(var)&!is.na(l)){
var[var==l]3*sd(var)&!is.na(l)){:
缺少需要TRUE/FALSE的值


我想知道为什么我会收到这个错误消息?我花了很长时间试图找出它,但没有。如果有人能帮我,我将不胜感激。非常感谢。

这很可能发生,因为您将异常值设置为
NA
。在消除第一个异常值后,函数
中值(var)
sd(var)
总和(var>3*sd(var))
return
NA
而不是您期望它返回的数值。您可以通过向上述函数中添加参数
NA.rm=TRUE
来解决此问题。不要这样做。自动删除异常值充其量是可疑的,但至少有一些测试可以识别多个异常值。但是,递归地在中位数周围使用3SD规则会给你带来假象。我同意罗兰的观点。有各种各样的原因表明这不是清理数据的正确方法。谢谢大家!我正在尝试删除一些异常值以便于可视化。在纬度和经度上有一些异常值。如果不删除,我的地图就搞糟了。ikop的解决方案有效