【问题标题】:How can I extract the upper triangle of a symmetrical matrix in R, excluding the diagonal values (all the 0s)如何提取R中对称矩阵的上三角形,不包括对角线值(全为0)
【发布时间】:2021-04-23 13:49:49
【问题描述】:

在我看来,这个问题应该已经回答过了,但我在任何地方都找不到。如何在R中提取对称矩阵的上三角形?我想计算这样一个矩阵的平均值,但对角线中没有 0,因为它们会影响我的结果。 我有这个代码:

library(Matrix)
matrix <- as.matrix(distObject)
m[lower.tri(m)] <- 0
triu(m)

目前这让我:

          V2        V3        V4        V5        V6        V7
V2 0.0000000 0.4946237 0.6834532 0.6653992 0.6881029 0.6438849
V3         . 0.0000000 0.7183673 0.6531532 0.6959707 0.6458333
V4         .         . 0.0000000 0.4024896 0.6845238 0.7075472
V5         .         .         . 0.0000000 0.6901840 0.6843854
V6         .         .         .           0.0000000 0.3821429
V7         .         .         .         .         . 0.0000000

但是,我需要类似的东西:

          V3        V4        V5        V6        V7
V3 0.4946237 0.6834532 0.6653992 0.6881029 0.6438849
V4         . 0.7183673 0.6531532 0.6959707 0.6458333
V5         .         . 0.4024896 0.6845238 0.7075472
V6         .         .         . 0.6901840 0.6843854
V7         .         .                   . 0.3821429

如果有人能帮忙就太好了!

【问题讨论】:

  • lower.tri 调用之后可能会添加m &lt;- m[-nrow(m),-1] 但确实需要一个可重现的示例
  • 哇,效果很好!谢谢!
  • 重读您的问题,如果您“想要计算这样一个矩阵的平均值,但对角线中没有 0”,mean(m[upper.tri(m, diag=FALSE)]) 就足够了(这就是与 mean(distObject)? 相同,即没有稀疏矩阵的东西

标签: r extract triangular


【解决方案1】:

感谢@user20650,我发现这段代码完全符合我的要求:

library(Matrix)
m <- as.matrix(distObject)
m[lower.tri(m)] <- 0
m <- m[-nrow(m),-1]
triu(m)

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多