<br />
outlier.IQR <- function(x, multiple = 1.5, replace = FALSE, revalue = NA) {<br />
q <- quantile(x, na.rm = TRUE) #四分位间距3倍间距以外的认为是离群值<br />
IQR <- q[4] - q[2]<br />
x1 <- which(x < q[2] - multiple * IQR | x > q[4] + multiple * IQR)<br />
x2 <- x[x1]<br />
if (length(x2) > 0) outlier <- data.frame(location = x1, value = x2)<br />
else outlier <- data.frame(location = 0, value = 0)<br />
if (replace == TRUE) {<br />
x[x1] <- revalue<br />
}<br />
return(outlier)<br />
}<br />
大家帮我看看这个函数,目的是找出一个向量中的异常值。如果 replace == TRUE,则将异常值替换成 NA。但是这个函数只能找出异常值,替换没有成功。不知道哪里出了问题。
举例如下:
<br />
a <- c(1.0, 1.2, 3.0, 2.3, 1.2, 9.0)<br />
outlier.IQR(a, replace = TRUE)<br />
结果是:
<br />
location value<br />
1 6 9<br />
> a<br />
[1] 1.0 1.2 3.0 2.3 1.2 9.0<br />
结果中异常值 9.0 并没有替换掉。
</p>