我使用R
的stats
包中的mad
函數來識別異常值。使用aggregate
,我能找到的邊界值因子含量的,像這樣每一個獨特的組合:在R中使用聚合子集數據的結果
require(stats)
set.seed(492)
y <- rnorm(2000)
x1 <- sample(letters[1:2], 2000,T)
x2 <- sample(letters[1:2], 2000,T)
df <- data.frame(y,x1,x2)
boundaries <- aggregate(df$y, list(df$x1, df$x2), function(x) cbind(median(x)
+ (3*mad(x)), median(x) - (3*mad(x))))
其中給出:
+---------------------------------------+
| Group.1 Group.2 x.1 x.2 |
+---------------------------------------+
| 1 a a 2.875560 -2.809068 |
| 2 b a 2.867109 -2.843691 |
| 3 a b 3.137889 -2.960135 |
| 4 b b 3.091169 -3.134296 |
+---------------------------------------+
x.1
是上限和x.2
是下限。我想要子集df
,以便對每個因子級別的組合刪除異常值 - 例如,在aa中,我不希望任何高於2.88或-2.80的值,但對於ab,我希望上限值爲3.14,下限爲-2.96。
到目前爲止,我使用by
已經試過,但它返回0行長度數據幀:
by(df$y, list(df$x1, df$x2), function(x) df[which(df$y>(median(x) + (3*mad(x))) & df$y<(median(x) - (3*mad(x)))),])
任何指導是非常讚賞。
「x.2」是否也代表下限? – A5C1D2H2I1M1N2O1R2T1
是的,對不起!我會在問題中澄清。 – luser