用对角线索引矩阵中的上三角或下三角

时间:2014-06-29 00:10:45

标签: r matrix

如何索引包含对角线的上三角矩阵或下三角矩阵?

我的矩阵看起来像这样:

          [,1]      [,2]     [,3]     [,4]      [,5]     [,6]     [,7]      [,8]
[1,] 70.291456        NA       NA       NA        NA       NA       NA        NA
[2,] 47.059392 31.505769       NA       NA        NA       NA       NA        NA
[3,]  6.019712  4.030134 0.515524       NA        NA       NA       NA        NA
[4,]  2.993088  2.003841 0.256326 0.127449        NA       NA       NA        NA

我拥有的是:

rows = 10    
cbind(row = unlist(lapply(2:rows, function(x) x:rows), use.names = FALSE), 
      col = rep(z[-length(z)], times = rev(tail(z, -1))-1))

上面代码的输出如下所示:

     row col
[1,]   2   1
[2,]   3   1
[3,]   4   1
[4,]   5   1
[5,]   6   1
[6,]   7   1
[7,]   8   1

但是这不包括我在矩阵中保留的对角线(第2行应该与[,1]和[,2]匹配,但它不匹配)。

1 个答案:

答案 0 :(得分:3)

如果目标是得到下对角线和对角线的行号和列号,那么如果m是输入矩阵,那么这里有两个解决方案:

1)

ok <- lower.tri(m, diag = TRUE)
cbind(row = row(m)[ok], col = col(m)[ok])

2)

g <- expand.grid(row = 1:nrow(m), col = 1:ncol(m)) # grid
g[lower.tri(m, diag = TRUE), ]

已添加第二种解决方案。