2015-10-15 62 views

回答

1

看看這個例子。一種方法是如下:

假設你正在使用的interquartile range來識別異常值,你可以這樣做:

示例數據:

#the first 3 rows are outliers here in both columns 
set.seed(100) 
mydf <- data.frame(a = c(1000,1000,1000,runif(10)), b= c(1000,1000,1000,runif(10))) 

我使用下面的函數基本上轉換每個列的異常值(異常值是小於25%四分位數減去IQR的1.5倍或大於75%四分位數加上1.5倍IQR的任何一點):

outlier <- function(x) { 
x[x < quantile(x,0.25) - 1.5 * IQR(x) | x > quantile(x,0.75) + 1.5 * IQR(x)] <- median(x) 
x 
} 

輸出(使用lapply適用於每一列):

> mydf[] <- lapply(mydf, outlier) 
> mydf 
      a   b 
1 0.48377074 0.6690217 
2 0.48377074 0.6690217 
3 0.48377074 0.6690217 
4 0.30776611 0.6249965 
5 0.25767250 0.8821655 
6 0.55232243 0.2803538 
7 0.05638315 0.3984879 
8 0.46854928 0.7625511 
9 0.48377074 0.6690217 
10 0.81240262 0.2046122 
11 0.37032054 0.3575249 
12 0.54655860 0.3594751 
13 0.17026205 0.6902905 

正如你所看到的異常值(1000的值在原data.frame即兩列前三排)已換成中位數。

+0

謝謝這是我需要.. – PaulBeales

+0

Np,很高興我可以幫助:) – LyzandeR

相關問題