2014-03-31 62 views
0

我是R新手,擁有1024行數據和3列數值數據。我創建了一個plot3d,我需要確定在plot3D中突出顯示的異常值的行號,但是在任何其他圖中都不可見。在R中使用3D圖時識別異常值

+0

請發表您的數據的樣本代碼,你試過到目前爲止,和你的參數是作爲一個局外人。 –

+0

下面是我的一些數據 – user3479729

+0

-1.5454 -0.6855 0.1003 -0.5284 的-0.4065 -0.2645 -1.0868 -0.5329 0.1623 -1e-04 -0.9569 -2.0055 0.389 -0.8356 -2.2085 0.5326 0.0391 -0.5044 -1.8376 -0.7834 0.3436 – user3479729

回答

0

使用內置INT arrayInd找到最大值(或最小值):

arrayInd(which.max(as.matrix(df)), .dim = dim(df)) 

例如,我們要做出一個3列數據框有一個突兀。

df <- data.frame(structure(replicate(3, runif(1024, 0, 1), simplify = FALSE), .Names = c('one', 'two', 'three'))) 
df[50, 2] <- 10 

現在,我們得到

arrayInd(which.max(as.matrix(df)), .dim = dim(df)) 
#  [,1] [,2] 
# [1,] 50 2 

而且我們看到罪犯是在第50和第2列。

+0

感謝您的回覆,但在取出最小和最大值後,似乎只出現在plot3D中的異常值仍然存在。我被引導創建了一個人爲構造的因素,我猜想要以某種方式進行分組,但我不知道要分組到什麼地方。我嘗試把行號放在一列和顏色編碼中,但我得到的只是一個淺綠色的異常值,我仍然無法確定它來自哪一行。 – user3479729

0

歡迎use​​r3479729。請發佈reproducible example。否則,你會得到沒有答案或不好的。

如果「M」是你的情節和「THRES」是你的異常數據閾值(?我需要在這裏假設你正在策劃一個矩陣)的矩陣,你可以使用:

> which(M>thres,arr.ind=TRUE) 
1

希望這有助於爲你完成工作。

> data <- c(-1.5454, -0.6855, 0.1003, -0.5284, -0.4065, -0.2645, 
      -1.0868, -0.5329, 0.1623, -1e-04, -0.9569, -2.0055, 
      0.389, -0.8356, -2.2085, 0.5326, 0.0391, -0.5044, 
      -1.8376, -0.7834, 0.3436) 
## original data 
> dd <- data.frame(matrix(data, ncol = 3, byrow = TRUE)) 
## find the row number of the largest row maximum 
> which.max(apply(dd, 1, max)) 
[1] 6 
## Use the previous line to remove the unwanted row 
> newDd <- dd[ -which.max(apply(dd, 1, max)), ] 
## plot the two data frames together to see the difference 
> library(plot3D) 
> par(mfrow = c(1, 2)) 
> with(dd, scatter3D(X1, X2, X3, phi = 0, theta = 50, bty = "g", 
        col = gg.col(100), pch = 19, cex = 2, colkey = FALSE)) 
> with(newDd, scatter3D(X1, X2, X3, phi = 0, theta = 50, bty = "g", 
         col = gg.col(100), pch = 19, cex = 2, colkey = TRUE)) 

enter image description here