【问题标题】:transform pair correlation to correlation matrix将对相关转换为相关矩阵
【发布时间】:2022-01-02 04:26:32
【问题描述】:

我被困在将配对相关转换为矩阵相关。如果相关矩阵包含在pair相关中,则将pair相关复制到矩阵中,如果没有,则用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
   }
  }
 }

【问题讨论】:

  • 您的意思是 == 而不是 m[i, 1]= cor$Var2 &amp;&amp; m[1, j]=cor$Var1 中的 =。当您将 'm' 创建为 NA 时,比较也不起作用
  • 为什么每一对都有两个不同值的条目?如果是相关性,则值应该相同。
  • 我重新编辑了矩阵和cor定义,没有问题了

标签: r matrix correlation


【解决方案1】:

如果我们的意图是将“长”格式重塑为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,并将levels 指定为'Var1'、'Var2' 中的unique 元素,然后执行@987654329 @

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

【讨论】:

  • 感谢“xtab”转换。挺有趣的。但是,关键是某些矩阵相关性没有包含在对相关性中,我想将其设为 0。
  • @zenoZeng 如果您检查 xtabs 输出,它会自动转换为 0
  • 现在,我明白你的意思了。 un1
  • 顺便说一句,你能发现我原来的计划有什么问题吗?
  • @zenoZeng 您的计划似乎是比较矩阵 creatd 仅与 NA 的矩阵的值
猜你喜欢
  • 1970-01-01
  • 2016-06-20
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
相关资源
最近更新 更多