根据R中对角线的值删除矩阵中的行和列

时间:2013-07-17 15:20:02

标签: r matrix

使用R:如果我有一个方阵,如果对角线上的值小于5,那么删除行和列的最简单(以及快速)方法是什么?例如

       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 in 1:nrow(Mx)),但删除行会更改总行数。

最终矩阵看起来像

       x1  x4
    x1 13  25
    x4 11  33

2 个答案:

答案 0 :(得分:5)

使用diag功能以及与此<[子集运算符的逻辑比较......

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

e.g。

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 :(得分: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