繁体   English   中英

R中行的上三角矩阵的向量

[英]a vector to an upper Triangle matrix by row in R

我有一个矢量说

a = c(1,2,3,4,5,6) 

我想将它们整理到的元素为上三角矩阵(不考虑对角线元素,它们都是零) 按行 我的目标是获得以下矩阵:

     [,1] [,2] [,3] [,4]
[1,]    0    1    2    3
[2,]    0    0    4    5
[3,]    0    0    0    6
[4,]    0    0    0    0

但是我采用以下方式是用这个向量替换对角元素,但是按列分配值。 例如,

b= matrix(0, 4, 4)
b[upper.tri(b, diag=FALSE)]=a 

它会给我以下矩阵

   [,1] [,2] [,3] [,4]
[1,]    0    1    2    4
[2,]    0    0    3    5
[3,]    0    0    0    6
[4,]    0    0    0    0

原因是当R为矩阵赋值时,默认情况下,它将按列分配。 我想知道是否有一种简单的方法可以解决我的问题,而无需编写for循环。

我之前发现了一个与我的问题相关的类似帖子,但它没有解释按行分配上三角矩阵的值:

创建一个三角矩阵

提前致谢!

这是一个选项

b[lower.tri(b, diag=FALSE)] <- a
b <- t(b)
b
#      [,1] [,2] [,3] [,4]
# [1,]    0    1    2    3
# [2,]    0    0    4    5
# [3,]    0    0    0    6
# [4,]    0    0    0    0

或者,根据需要重新排序a并将其分配到右上角三角形中:

ut <- upper.tri(b, diag=FALSE)
b[ut] <- a[order(row(ut)[ut], col(ut)[ut])]
b
     [,1] [,2] [,3] [,4]
[1,]    0    1    2    3
[2,]    0    0    4    5
[3,]    0    0    0    6
[4,]    0    0    0    0

请注意,要填充ASYMMETRIC矩阵,您可以先通过上面显示的代码填充上三角形,然后使用不同的向量填充下部三角形(不需要转置)。

  c <- c(7,8,9,10,11,12)
  b[lower.tri(b, diag=FALSE)] <- c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM