如何索引包含对角线的上三角矩阵或下三角矩阵?
我的矩阵看起来像这样:
[,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]匹配,但它不匹配)。
答案 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), ]
已添加第二种解决方案。