0

私は次の方法でマトリックスを持っています:

         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 を超える遺伝子があり、手動で行うことはできません。私はいくつかのことを試しましたが、うまくいきませんでした。

4

2 に答える 2

2
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.
于 2013-06-04T08:02:20.810 に答える
2

上記のMrGumbleの答えに基づいています。彼の解決策の問題点は、R のエントリは常に列優先であるため、下の三角形をデータの列で埋めても、上の三角形を埋められない可能性があることです。簡単な方法の 1 つは、下部を使用するか、マトリックスの上部を下部の転置で埋めることです。

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 を作成しました)。

于 2013-06-04T08:20:36.283 に答える