在R中的矩阵中得到对角元素
我正试图用R中的一个矩阵解决一个小问题。我在R中有下一个矩阵(在R中的矩阵中得到对角元素,r,matrix,R,Matrix,我正试图用R中的一个矩阵解决一个小问题。我在R中有下一个矩阵(alfa): 或者类似于带有NA的矩阵: [,1] [,2] [,3] [1,] 1 4 0 [2,] 2 0 NA [3,] 0 NA NA 如您所见,位于alfa对角下方的元素为零或NA。我尝试过使用行(alfa)和col(alfa)的代码,但无法获得预期的矩阵,例如: (row(alfa)+col(alfa)-1)%%ncol(alfa)!=0 我得到了这样一个结果,
alfa
):
或者类似于带有NA
的矩阵:
[,1] [,2] [,3]
[1,] 1 4 0
[2,] 2 0 NA
[3,] 0 NA NA
如您所见,位于alfa
对角下方的元素为零或NA
。我尝试过使用行(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
填充
非常感谢您的帮助。
fflower.tri
几乎可以满足您的需要,但您需要反转行
f <- function(mat, diag = 0, offdiag = NA){
rev_vec <- seq(ncol(mat), 1)
j <- mat[,rev_vec]
j[lower.tri(j)] <- offdiag
diag(j) <- diag
j[,rev_vec]
}
alfa[apply(lower.tri(alfa), 1, rev)] <- NA
alfa[apply(lower.tri(alfa),1,rev)]lower.tri
几乎可以实现您想要的功能,但您需要反转行
alfa[apply(lower.tri(alfa), 1, rev)] <- NA
alfa[apply(lower.tri(alfa),1,rev)]当可再现数据得到认可时,提供一个小矩阵,比如matrix(1:9,nrow=3)
,不是更简单吗?功能应该是一样的,不是吗?这行吗m[(行(m)+列(m)-ncol(m)>0]是@thelatemail抱歉,我下次会接受你的推荐!!!哎呀,缺少)
。应该是alfa[(行(alfa)+col(alfa)-ncol(alfa))>0],而可再现数据是值得赞赏的,提供一个小矩阵,比如matrix(1:9,nrow=3)
?功能应该是一样的,不是吗?这行吗m[(行(m)+列(m)-ncol(m)>0]是@thelatemail抱歉,我下次会接受你的推荐!!!哎呀,缺少)
。应该是alfa[(行(alfa)+col(alfa)-ncol(alfa))>0]谢谢@agstudy。我应该在一个干净的会话中检查函数。谢谢@agstudy。我应该在一个干净的会话中检查函数。
alfa[apply(lower.tri(alfa), 1, rev)] <- NA