R 语言中有专门的 outliers 这个包用来检验异常值,说明书在这里:
http://cran.r-project.org/web/packages/outliers/outliers.pdf
不过这里还有一个函数 outlier.IQR。outlier.IQR() 能对异常值进行替换,替换值自己设定,可以为 NA、平均值、中位数等等。
outlier.IQR - function(x, multiple = 1.5, replace = FALSE, revalue = NA) {
q - quantile(x, na.rm = TRUE) #四分位间距3倍间距以外的认为是离群值
IQR - q[4] - q[2]
x1 - which(x q[2] - multiple * IQR | x q[4] + multiple * IQR)
x2 - x[x1]
if (length(x2) 0) outlier - data.frame(location = x1, value = x2)
else outlier - data.frame(location = 0, value = 0)
if (replace == TRUE) {
x[x1] - revalue
}
return(list(new.value = x, outlier = outlier))
}
结果输出为列表,分别为 outlier.IQR() $ new.value 和 outlier.IQR() $ outlier。前者为异常值替换后的新向量,后者为原向量中异常值及其所在位置。