用对角线索引矩阵中的上三角形或下三角形
Posted
技术标签:
【中文标题】用对角线索引矩阵中的上三角形或下三角形【英文标题】:indexing upper or lower triangle in matrix with diagonal 【发布时间】:2014-06-29 00:10:44 【问题描述】:如何索引包括对角线的上三角矩阵或下三角矩阵?
我的矩阵是这样的:
[,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] 匹配,但不匹配)。
【问题讨论】:
你试过?lower.tri
函数吗?
你试过搜索吗?
【参考方案1】:
如果目标是获取下对角线和对角线的行号和列号,那么如果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), ]
添加第二种解决方案。
【讨论】:
which(lower.tri(m, diag = TRUE), arr.ind=T)
也会很好用。以上是关于用对角线索引矩阵中的上三角形或下三角形的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用平滑的拟合线和置信椭圆,上三角形中使用散点图对角线最小值和最大值
R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用底纹和颜色表示相关性变量按其原始顺序绘制上三角形空白