2013-07-17 71 views
1

使用R:如果我有一個方形矩陣,如果對角線上的值是最簡單(也是最快),那麼刪除行和列的方法是什麼少於五?例如根據對角線中的值刪除矩陣中的行和列R

 x1 x2 x3 x4 
    x1 13 15 12 25 
    x2 23 4 23 34 
    x3 21 11 1 11 
    x4 11 22 23 33 

的代碼將刪除第2行和第2欄,和行3和列3我試圖做爲(I在1:nrow(MX)),但刪除行改變的行的總數。

最終的矩陣看起來像

 x1 x4 
    x1 13 25 
    x4 11 33 

回答

5

使用diag功能和邏輯比較<[子集操作是這樣的...

idx <- ! diag(m) < 5 
m <- m[ idx , idx ] 

例如

m 
# x1 x2 x3 x4 
#x1 13 15 12 25 
#x2 23 4 23 34 
#x3 21 11 1 11 
#x4 11 22 23 33 

idx <- ! diag(m) < 5  
m <- m[ idx , idx ] 

m 
# x1 x4 
#x1 13 25 
#x4 11 33 
+1

17秒快。但她也想選擇cols。 – Roland

+0

行列! –

+2

@羅蘭哎呀。更新。 (雖然我可能不應該做兩次比較! –

0

不是更優雅或最快的解決方案,但它工作

比我
mat <- matrix(c(13, 23, 21, 11, 15, 4, 11, 22, 12, 23, 
       1, 23, 25, 34, 11, 33), nrow = 4) 

ind <- which(diag(diag(mat)) > 5, arr.ind = TRUE) 

mat[ind[,1], ind[,2]] 
##  [,1] [,2] 
## [1,] 13 25 
## [2,] 11 33