r - 在 R 中按行到上三角矩阵的向量

标签 r matrix vector

我有一个向量说

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/

相关文章:

r - 如何在 R 中定义矢量化函数

r - 用ggplot2绘制SpatialLinesDataFrame

r - 如何使用 SOM 算法进行分类预测

c++ - vector 分配崩溃

math - 透视变换矩阵的计算

c++ - std::vector resize() 仅在clear() 之后才起作用

r - ggplot中的热图,每组不同的颜色

python - 矩阵:有效地将第 n 行移动 n 个位置

c++ - 到处使用共享指针有什么陷阱?

c++ - 使用指向 vector vector 的唯一指针成员初始化模板化矩阵类