我有一个向量说
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 循环的情况下解决我的问题。
我之前找到了一篇与我的问题相关的类似帖子,但它没有解释按行为上三角矩阵分配值:
creating a triangular matrix
提前致谢!
最佳答案
这是一种选择
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
关于r - 在 R 中按行到上三角矩阵的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30787317/