查了好多包,都只能找出异常值或者给出异常值的位置,手动写了段代码能正常运行,使用Tukey法找出高值中的异常值并替换为-1:
# Tukey method outlier rmoval:
Tukey_outlier<-function(x){
n<-length(x)
sort_data<-x
i<-1
# caculate Tukey quartiles:
b<-fivenum(x)
Tukey_Critical<-b[4]+1.5*(b[4]-b[2])
# replace outliers by -1:
for(i in 1:n){
if(sort_data[i]>Tukey_Critical){
sort_data[i]<--1
}
}
return(sort_data)
}
想节省运行开销,先对数据正序排列,不用全部都和Tueky Critical比较,当一个数据小于Tueky Critical时终止循环。但是这个写法就报错:
# Tukey method outlier rmoval:
Tukey_outlier2<-function(x){
n<-length(x)
sort_data<-sort(x)
i<-n
# caculate Tukey quartiles:
b<-fivenum(x)
Tukey_Critical<-b[4]+1.5*(b[4]-b[2])
# replace outliers by -1:
for(sort_data[i]>Tukey_Critical){
sort_data[i]<--1
i<-n-1
}
return(sort_data)
}
报错信息:错误于source("Tukey_outlier2.r"): Tukey_outlier2.r:13:18: 意外的'['
12: # replace outliers by -1
13: for(sort_data[
^
看着像是循环语句的判断条件不能写类似sort_data>Tukey_Critical的形式吗?