R 函数递归删除异常值
我编写了一个函数来重新去除异常值(对于任何距离其中值3sd的数据点)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
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))
returnNA
而不是您期望它返回的数值。您可以通过向上述函数中添加参数NA.rm=TRUE
来解决此问题。不要这样做。自动删除异常值充其量是可疑的,但至少有一些测试可以识别多个异常值。但是,递归地在中位数周围使用3SD规则会给你带来假象。我同意罗兰的观点。有各种各样的原因表明这不是清理数据的正确方法。谢谢大家!我正在尝试删除一些异常值以便于可视化。在纬度和经度上有一些异常值。如果不删除,我的地图就搞糟了。ikop的解决方案有效