我有一个矩阵:
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替换它。
contingency.table.1[row(contingency.table.1) ==
col(contingency.table.1) & contingency.table.1 == 0] <- 1我想得到一个矩阵,如果对称位置上有0,那么用1替换它们。
我想要的是:
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替换它们。
发布于 2022-11-23 08:23:24
使用for循环。
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 1https://stackoverflow.com/questions/74543334
复制相似问题