相关性矩阵如何自动添加主题

问题描述 投票:0回答:1

我有一个像这样的相关性矩阵:

data <- (c(1,1,0.01,0.02,0.03,0.06,
           1,1,0.01,0.02,0.03,0.06,
           0.01,0.01,1,0.5,0.03,0.02,
           0.02,0.02,0.5,1,0.02,0.03,
           0.03,0.03,0.03,0.02,1,0.03,
           0.06,0.06,0.02,0.03,0.03,1))


Matrix <- matrix(data, ncol = 6,nrow=6,  byrow = FALSE) # byrow = FALSE por defecto


row.names(Matrix) <- (c("1A", "1B", "2A", "2B", "3A", "3B"))
colnames(Matrix) <- (c("1A", "1B", "2A", "2B", "3A", "3B"))

Matrix
     1A   1B   2A   2B   3A   3B
1A 1.00 1.00 0.01 0.02 0.03 0.06
1B 1.00 1.00 0.01 0.02 0.03 0.06
2A 0.01 0.01 1.00 0.50 0.03 0.02
2B 0.02 0.02 0.50 1.00 0.02 0.03
3A 0.03 0.03 0.03 0.02 1.00 0.03
3B 0.06 0.06 0.02 0.03 0.03 1.00

因此它给出了每个主题与其余主题的关联。

我需要“复制”一些主题(它们与样本的其余部分具有相同的关联模式)。因此,在此示例中,我想复制参与者 3B 并将其命名为 3C。这里是预期的输出:

data2 <- (c(1,1,0.01,0.02,0.03,0.06,0.06,
           1,1,0.01,0.02,0.03,0.06,0.06,
           0.01,0.01,1,0.5,0.03,0.02,0.02,
           0.02,0.02,0.5,1,0.02,0.03,0.03,
           0.03,0.03,0.03,0.02,1,0.03,0.03,
           0.06,0.06,0.02,0.03,0.03,1,1,
           0.06,0.06,0.02,0.03,0.03,1,1))


Matrix2 <- matrix(data2, ncol = 7,nrow=7,  byrow = FALSE) # byrow = FALSE por defecto


row.names(Matrix2) <- (c("1A", "1B", "2A", "2B", "3A", "3B", "3C"))
colnames(Matrix2) <- (c("1A", "1B", "2A", "2B", "3A", "3B", "3C"))

 Matrix2
     1A   1B   2A   2B   3A   3B   3C
1A 1.00 1.00 0.01 0.02 0.03 0.06 0.06
1B 1.00 1.00 0.01 0.02 0.03 0.06 0.06
2A 0.01 0.01 1.00 0.50 0.03 0.02 0.02
2B 0.02 0.02 0.50 1.00 0.02 0.03 0.03
3A 0.03 0.03 0.03 0.02 1.00 0.03 0.03
3B 0.06 0.06 0.02 0.03 0.03 1.00 1.00
3C 0.06 0.06 0.02 0.03 0.03 1.00 1.00

可以自动执行此操作吗?

提前非常感谢您

r matrix tidyr
1个回答
0
投票

你可以写一些辅助函数

dup_sample <-function(m, existing, new_name) {
  stopifnot(existing %in% rownames(m) & existing %in% colnames(m))
  row <- m[existing, ]
  col <- m[, existing]
  newm <- rbind(cbind(m, row), c(col, 1))
  dimnames(newm) <- list(c(rownames(m), new_name), c(colnames(m), new_name))
  newm
}

然后你就可以了

dup_sample(Matrix, "3B", "3C")
#      1A   1B   2A   2B   3A   3B   3C
# 1A 1.00 1.00 0.01 0.02 0.03 0.06 0.06
# 1B 1.00 1.00 0.01 0.02 0.03 0.06 0.06
# 2A 0.01 0.01 1.00 0.50 0.03 0.02 0.02
# 2B 0.02 0.02 0.50 1.00 0.02 0.03 0.03
# 3A 0.03 0.03 0.03 0.02 1.00 0.03 0.03
# 3B 0.06 0.06 0.02 0.03 0.03 1.00 1.00
# 3C 0.06 0.06 0.02 0.03 0.03 1.00 1.00
© www.soinside.com 2019 - 2024. All rights reserved.