2013-03-05 30 views
1

我是R新手,我嘗試使用一個函數來測試超過600個變量的大數據框中的異常值,除了最後2列以外,它們都是數字。我嘗試了outliers包中的異常函數來一次測試一列,最後我用一個我無法使用的數字向量結束。有沒有更好的方法來識別數據框中的所有異常值。測試數據框中的ouliers

myout <- c() 
    for (i in 1:dim(training)[2]){ 
    if (is.numeric(training[,i])) { 
    myout <- c(myout,outlier(training[,i])) } 
    } 
+0

你,因爲你創建了一個矢量結束了一個載體。這裏有什麼問題?如果最後兩列不是數字,爲什麼要測試它們? – 2013-03-05 08:32:15

+3

異常函數究竟有什麼問題?首先,離羣值函數可以給出一個數據框,在其中它可以單獨測試每列... – 2013-03-05 08:33:39

+0

你讀過'?outlier'嗎?它返回一個與平均值最爲不同的向量中的值,因此值的向量正是您的代碼所期望的。你期待什麼作爲輸出? – alexwhan 2013-03-05 09:51:05

回答

2

正如你可以在異常的幫助文件讀取查找每個變量的一個值,即不同於平均值的大部分之一。我想你想要的是爲每個變量找出所有異常值數據點的索引。這可以通過以下方式來完成(當然你需要先刪除您的非數值變量):

# first write a custom function that returns the index of all outliers 
# I define an outlier as 3 sd's away from the mean, you can adjust that 

is.outlier <- function(x) which(abs(x - mean(x)) > 3*sd(x)) 

# turn the df into a list, and apply the function to each variable with lapply 

df.as.list <- as.list(df) # enter the name of your data frame instead of df 
lapply(df.as.list, is.outlier) 

它將與元素 列返回一個列表變量的異常值i的指數一世。

0

事實上你可能還需要刪除異常值,但每this 2年前:

x[!x %in% boxplot.stats(x)$out]