我已經查看了一組數據,並決定刪除異常值將會很好,異常值的定義是距離均值2SD。刪除R中的異常值
如果我有一組數據,說500行,有15個不同的屬性,我怎樣才能刪除所有具有1個或多個屬性的行,這些屬性是距標準差2個標準偏差?
有沒有一種簡單的方法來使用R做到這一點? 謝謝,
我已經查看了一組數據,並決定刪除異常值將會很好,異常值的定義是距離均值2SD。刪除R中的異常值
如果我有一組數據,說500行,有15個不同的屬性,我怎樣才能刪除所有具有1個或多個屬性的行,這些屬性是距標準差2個標準偏差?
有沒有一種簡單的方法來使用R做到這一點? 謝謝,
可能有很多方法,並可能添加包來處理這個問題。我建議你先試試這個:
library(sos); findFn("outlier")
這裏有一個方法,你可以做你的要求使用scale
功能,可以標準化的載體。
#create a data set with outliers
set.seed(10)
dat <- data.frame(sapply(seq_len(5), function(i)
sample(c(1:50, 100:101), 200, replace=TRUE)))
#standardize each column (we use it in the outdet function)
scale(dat)
#create function that looks for values > +/- 2 sd from mean
outdet <- function(x) abs(scale(x)) >= 2
#index with the function to remove those values
dat[!apply(sapply(dat, outdet), 1, any), ]
因此,在回答你的問題是存在這樣一個簡單的方法的代碼要做到這一點,可以歸結爲1行代碼:
dat[!apply(sapply(dat, function(x) abs(scale(x)) >= 2), 1, any), ]
而且我猜有一個包這可能會做到這一點和更多。 sos
包很棒(恕我直言)尋找功能做你想做的。
na.rm = TRUE, ...) {
qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
H <- 1.5 * IQR(x, na.rm = na.rm)
y <- x
y[x < (qnt[1] - H)] <- NA
y[x > (qnt[2] + H)] <- NA
y
}
如果你做一個StackOverflow的搜索'[R]刪除outlier'你會得到許多外用前面的問題,如:http://stackoverflow.com/q/1444306/602276或http:// stackoverflow.com/questions/4787332/how-to-remove-outliers-from-a-dataset – Andrie