0
我有一個數據幀(DF),如下所示:R:迭代離羣檢測
V V1 V2 V3
1 A B 32
1 A C 33
1 A E 43
1 A F 22
1 A T 53
1 A N 54
1 C T 44
1 C G 11
1 C N 31
1 C D 53
1 C U 75
1 A T 53
1 A N 54
2 C T 42
2 C G 14
2 C N 35
2 C D 23
2 C U 56
什麼想要做我得到爲(V,V1)的每一種組合的異常值,這是爲了便於用我擁有的代碼來實現。
d <- as.data.table(df)
# Add a column to keep track of row numbers
d[, c('row'):= list(seq_len(nrow(d)))]
# For each group (combination of V and V1), perform the outlier test
outliers <- d[, chisq.out.test(V3), list(V, V1)]
的主要問題是,這種函數將返回的每個組合(V,V1
)只是一個異常值與p值。我需要的基本上是所有異常值以及它們的p值都是異常值(V,V1
),換句話說,所有候選值都是V2
,其p值是異常值(V,V1
)。
任何想法如何改變我的代碼來做到這一點?
感謝您的回答,我更新了該函數,以便它可以返回離羣值分數以及V,V1。但最後,我怎樣才能得到每個異常值的相應行號?所以我可以得到哪個V2是每個V,V1的異常值。 我稱之爲功能如下: outlier < - d [,dropout(V3),list(V,V1)] outlier < - merge(outliers,d [,list(max.ind = row [which .max(V3)]),list(V,V1)],by = c('V','V1'))' 但是這隻會給我最大的行索引,我希望每個異常行索引。 – ifreak
@ifreak'ave'按照發現它們的順序返回值。因此,您可以將其添加回data.frame,'dd $ do < - with(dd,ave(V3,V1,V2,FUN = dropout))'。 – MrFlick
現在即時通訊中有一個奇怪的錯誤('缺少值,其中TRUE/FALSE需要')。你有什麼想法爲什麼? – ifreak