簡體   English   中英

在R中拆分成對矩陣

[英]Splitting a pairwise matrix in R

我有以下方式的矩陣:

         gene ids  A-B   A-C  A-D  B-C  B-D C-D

          GENE1     0     0    1    1    1   0
          GENE2     1     0    1    1    1   1
          GENE3     1     0    0    0    1   1
          GENE4     0     1    0    0    0   0

並希望將其拆分如下:對角線值將為空,因為上述矩陣是成對比較。

          Gene1
               A  B   C  D  
           A      0   0  1 
           B   0      1  1
           C   0  1      0
           D   1  1   0

對於所有基因都以相同的方式。

我有超過10000個基因,無法手動完成。 我嘗試了幾件事,但沒有成功。

m <- structure(c(0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0), .Dim = c(4L, 6L), .Dimnames = list(c("GENE1", "GENE2", "GENE3", "GENE4"), c("A-B", "A-C", "A-D", "B-C", "B-D", "C-D")))

gene <- matrix(NA, ncol=4, nrow=4) # empty, template matrix
gene[upper.tri(gene)] <- m[1,]
gene[lower.tri(gene)] <- rev(m[1,])

## gene now contains the interaction matrix for GENE1.

我基於上面MrGumble的答案。 他的解決方案的問題在於,R的條目始終按主列排序,因此我們可以用數據列填充下三角,但不填充上三角。 一種簡單的方法是只使用下部,或用下部的轉置來填充矩陣的上部。

m <- structure(c(0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0), .Dim = c(4L, 6L), .Dimnames = list(c("GENE1", "GENE2", "GENE3", "GENE4"), c("A-B", "A-C", "A-D", "B-C", "B-D", "C-D")))

gene <- matrix(0, ncol=4, nrow=4) # empty, template matrix
gene[lower.tri(gene)] <- m[4,]
gene <- gene + t(gene)
diag(gene) <- NA

(制作此社區Wiki,因為這不是我自己的答案)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM