首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使矩阵对称

使矩阵对称
EN

Stack Overflow用户
提问于 2022-11-23 07:51:33
回答 1查看 48关注 0票数 0

我有一个矩阵:

代码语言:javascript
复制
contingency.table.1 <- structure(c(40, 5, 1, 0, 24, 8, 0, 1, 2, 1, 1, 0, 0, 1, 0, 1), .Dim = c(4L, 
4L), .Dimnames = list(col1 = c("0", "1", "2", "3"), col2 = c("0", 
"1", "2", "3")), class = "table")

然后,如果在矩阵的对角线上遇到0,则用1替换它。

代码语言:javascript
复制
contingency.table.1[row(contingency.table.1) == 
                                              col(contingency.table.1) & contingency.table.1 == 0] <- 1

我想得到一个矩阵,如果对称位置上有0,那么用1替换它们。

我想要的是:

代码语言:javascript
复制
contingency.table.1 <- structure(c(40, 5, 1, 1, 24, 8, 0, 1, 2, 1, 1, 0, 1, 1, 0, 1), .Dim = c(4L, 
4L), .Dimnames = list(col1 = c("0", "1", "2", "3"), col2 = c("0", 
"1", "2", "3")), class = "table")

如果两个零都处于对称位置,则用1替换它们。

EN

回答 1

Stack Overflow用户

发布于 2022-11-23 08:23:24

使用for循环。

代码语言:javascript
复制
rp <- \(m) {
  stopifnot(diff(dim(m)) == 0L)  ## symmetricity check
  for (i in seq_len(ncol(m)) - 1L) {
    c1 <- n - i
    c2 <- i + 1L
    if (all(c(m[c1, c2], m[c2, c1]) == 0))
      m[c1, c2] <- m[c2, c1] <- 1
  }
  m
}

rp(contingency.table.1)
#     col2
# col1  0  1  2  3
#    0 40 24  2  1
#    1  5  8  1  1
#    2  1  0  1  0
#    3  1  1  0  1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74543334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档