【发布时间】:2014-07-13 22:17:42
【问题描述】:
我正在尝试解决 R 中的矩阵的一个小问题。我在 R 中有下一个矩阵 (alfa):
alfa <- matrix(1:9,nrow=3)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
alfa 的对角线用零填充。我想在这个对角线上的所有元素(可能是这个对角线上的上三角形)得到一个新矩阵。我希望得到一个像这样的新矩阵:
[,1] [,2] [,3]
[1,] 1 4 0
[2,] 2 0 0
[3,] 0 0 0
或者像NA这样的矩阵:
[,1] [,2] [,3]
[1,] 1 4 0
[2,] 2 0 NA
[3,] 0 NA NA
如您所见,位于alfa 对角线下方的元素为零或NA。我尝试过使用 row(alfa) 和 col(alfa) 的代码,但我无法获得预期的矩阵,例如:
(row(alfa)+col(alfa)-1)%%ncol(alfa)!=0
我得到了这个结果,对角线上的上下元素都是TRUE:
[,1] [,2] [,3]
[1,] TRUE TRUE FALSE
[2,] TRUE FALSE TRUE
[3,] FALSE TRUE TRUE
但是我只想要上面的元素,其余的元素应该填零或者NA。
非常感谢您的帮助。
【问题讨论】:
-
虽然可重复的数据很受欢迎,但提供一个小矩阵会不会更简单,比如
matrix(1:9,nrow=3)?功能应该是一样的吧? -
这行得通吗?
m[(row(m) + col(m) - ncol(m) > 0] <- 0其中 m 是您的矩阵。 -
是的@thelatemail 对不起,我下次会接受你的推荐!!!
-
哎呀,缺少
)。应该是alfa[(row(alfa) + col(alfa) - ncol(alfa)) > 0] <- 0(将m更改为alfa)