我有一个矢量说
a = c(1,2,3,4,5,6)
Run Code Online (Sandbox Code Playgroud)
我想将它们整理到的元素为上三角矩阵(不考虑对角线元素,它们都是零)按行.我的目标是获得以下矩阵:
[,1] [,2] [,3] [,4]
[1,] 0 1 2 3
[2,] 0 0 4 5
[3,] 0 0 0 6
[4,] 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
但是我采用以下方式是用这个向量替换对角元素,但是按列分配值.例如,
b= matrix(0, 4, 4)
b[upper.tri(b, diag=FALSE)]=a
Run Code Online (Sandbox Code Playgroud)
它会给我以下矩阵
[,1] [,2] [,3] [,4]
[1,] 0 1 2 4
[2,] 0 0 3 5
[3,] 0 0 0 6
[4,] 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
原因是当R为矩阵赋值时,默认情况下,它将按列分配.我想知道是否有一种简单的方法可以解决我的问题,而无需编写for循环.
我之前发现了一个与我的问题相关的类似帖子,但它没有解释按行分配上三角矩阵的值:
提前致谢!
Jos*_*ien 14
这是一个选项
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
Run Code Online (Sandbox Code Playgroud)
或者,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6965 次 |
| 最近记录: |