将对相关性转换为相关矩阵

transform pair correlation to correlation matrix

我一直在将对相关性转换为矩阵相关性。如果pair correlation中包含相关矩阵,则将pair correlation复制到矩阵中,如果不存在,则用0填充。

cor<- data.frame("var1"=paste0("aa", sep="_", 1:13), "var2"=paste0("bb", sep="_", 1:17), "b"=runif(221, min=0, max=1))

m <- matrix(0, 23, 27)
rownames(m)<- c(unique(cor$var1), paste0("aa", sep="_", 14:23))
colnames(m)<- c(unique(cor$var2), paste0("bb", sep="_", 18:27))

for (i in 1:nrow(m)) {
  itemrow<- row.names(m)[i]
  for (j in 1:ncol(m)) {
    itemcol<- colnames(m)[j]
    if (itemrow== cor$var2 && itemcol==cor$var1) {
    m[itemrow, itemcol] <- cor$b
   } else {
  NULL
   }
  }
 }

如果我们打算将 'long' 格式重塑为 matrix 格式,那么也许我们需要 xtabs

xtabs(b ~ Var1 + Var2, cor)

-输出

           Var2
Var1         kkkkkkkkkk llllllllll mmmmmmmmmm nnnnnnnnnn oooooooooo pppppppppp qqqqqqqqqq rrrrrrrrrr ssssssssss tttttttttt
  aaaaaaaaaa   16.31062    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  bbbbbbbbbb    0.00000   16.44782    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  cccccccccc    0.00000    0.00000   20.21136    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  dddddddddd    0.00000    0.00000    0.00000   18.47966    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  eeeeeeeeee    0.00000    0.00000    0.00000    0.00000   30.75083    0.00000    0.00000    0.00000    0.00000    0.00000
  ffffffffff    0.00000    0.00000    0.00000    0.00000    0.00000   41.20744    0.00000    0.00000    0.00000    0.00000
  gggggggggg    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000   38.55080    0.00000    0.00000    0.00000
  hhhhhhhhhh    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000   20.69509    0.00000    0.00000
  iiiiiiiiii    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000   16.79159    0.00000
  jjjjjjjjjj    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000   19.11196

如果我们需要所有 levels 使其对称,请将列转换为 factor,并在 [=35] 中将 levels 指定为 unique 元素=]、'Var2' 然后执行 xtabs

un1 <- sort(unique(unlist(cor[c("Var1", "Var2")])))
xtabs(b ~ Var1 + Var2, transform(cor, Var1 = factor(Var1, 
           levels = un1), Var2 = factor(Var2, levels = un1)))

-输出

            Var2
Var1         aaaaaaaaaa bbbbbbbbbb cccccccccc dddddddddd eeeeeeeeee ffffffffff gggggggggg hhhhhhhhhh iiiiiiiiii jjjjjjjjjj kkkkkkkkkk llllllllll
  aaaaaaaaaa    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000   16.31062    0.00000
  bbbbbbbbbb    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000   16.44782
  cccccccccc    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  dddddddddd    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  eeeeeeeeee    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  ffffffffff    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  gggggggggg    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  hhhhhhhhhh    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  iiiiiiiiii    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  jjjjjjjjjj    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  kkkkkkkkkk    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  llllllllll    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  mmmmmmmmmm    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  nnnnnnnnnn    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  oooooooooo    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  pppppppppp    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  qqqqqqqqqq    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  rrrrrrrrrr    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  ssssssssss    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  tttttttttt    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
            Var2
Var1         mmmmmmmmmm nnnnnnnnnn oooooooooo pppppppppp qqqqqqqqqq rrrrrrrrrr ssssssssss tttttttttt
  aaaaaaaaaa    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  bbbbbbbbbb    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  cccccccccc   20.21136    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  dddddddddd    0.00000   18.47966    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  eeeeeeeeee    0.00000    0.00000   30.75083    0.00000    0.00000    0.00000    0.00000    0.00000
  ffffffffff    0.00000    0.00000    0.00000   41.20744    0.00000    0.00000    0.00000    0.00000
  gggggggggg    0.00000    0.00000    0.00000    0.00000   38.55080    0.00000    0.00000    0.00000
  hhhhhhhhhh    0.00000    0.00000    0.00000    0.00000    0.00000   20.69509    0.00000    0.00000
  iiiiiiiiii    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000   16.79159    0.00000
  jjjjjjjjjj    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000   19.11196
  kkkkkkkkkk    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  llllllllll    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  mmmmmmmmmm    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  nnnnnnnnnn    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  oooooooooo    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  pppppppppp    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  qqqqqqqqqq    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  rrrrrrrrrr    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  ssssssssss    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000
  tttttttttt    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000    0.00000

或者如果我们想对创建的矩阵进行赋值

m[as.matrix(cor[1:2])] <- cor$b