[英]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.