将R中的矩阵转换为具有相应条目的上三角/下三角矩阵

35

我有一个对称矩阵,想要在R中将其转换为上三角/下三角矩阵。 有没有方法可以做到这一点?

我尝试使用upper.trilower.tri命令,但无法实现目标。 这些命令只会给出一个由TRUEFALSE组成的矩阵。


3
请查看?upper.tri?lower.tri中的示例。它与您的问题(以及下面@ujjwal的答案)非常相似。 - shekeine
3个回答

52

获取上三角矩阵:

mat <- matrix(1:9, 3, 3)
mat[lower.tri(mat)] <- 0

要删除对角线,请使用:

mat[lower.tri(mat,diag=TRUE)] <- 0 或者 mat[!upper.tri(mat)] <- 0,如Karolis在评论中建议的那样。


8

尽管之前的回答很完美,但手册才是你的好朋友:

Lower and Upper Triangular Part of a Matrix

Description

Returns a matrix of logicals the same size of a given matrix with entries TRUE in the lower or upper triangle.

Usage

lower.tri(x, diag = FALSE)
upper.tri(x, diag = FALSE)

Arguments

x     

a matrix.

diag

logical. Should the diagonal be included?

See Also

diag, matrix.

Examples

(m2 <- matrix(1:20, 4, 5))
lower.tri(m2)
m2[lower.tri(m2)] <- NA
m2

5
一个简单的方法:
library(matrixcalc)

lower.triangle(X) #lower triangular

upper.triangle(X) #upper triangular

或者:

library(Matrix)

tril(X) #lower triangular

triu(X) #upper triangular

4
lower.triangle(X) #找不到下三角函数! - JStrahl
2
@JStrahl 你需要安装matrixcalc包才能使用lower.triangle(X)和upper.triangle(X)。请执行install.packages("matrixcalc")命令进行安装,然后执行library(matrixcalc)命令加载该包。 - TAH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接