作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在查看一些高通量基因数据并基于贝叶斯统计进行一种类型的相关分析。我需要做的一件事是找到数据集中产品的每个成对组合,并找到每个结果行的总和。
例如,对于高吞吐量数据集矩阵 Dataset
(Dataset <- structure(list(`Condition 1` = c(1L, 3L, 2L, 2L), `Condition 2` = c(2L, 1L, 7L, 2L), `Condition 3` = c(4L, 1L, 2L, 5L)), .Names = c("Condition 1", "Condition 2", "Condition 3"), class = "data.frame", row.names = c("Gene A", "Gene B", "Gene C", "Gene D")))
Condition 1 Condition 2 Condition 3
Gene A 1 2 4
Gene B 3 1 1
Gene C 2 7 2
Gene D 2 2 5
Comb
:
Condition 1 Condition 2 Condition 3
Gene A Gene A 1 4 9
Gene A Gene B 3 2 4
Gene A Gene C 2 14 8
Gene A Gene D 2 4 20
Gene B Gene B 9 1 1
Gene B Gene C 6 7 2
Gene B Gene D 6 2 5
Gene C Gene C 4 49 4
Gene C Gene D 4 14 10
Gene D Gene D 4 4 25
CombSums
):
Gene A Gene B Gene C Gene D
Gene A NA 10 24 26
Gene B 10 NA 15 13
Gene C 24 15 NA 28
Gene D 26 13 28 NA
combs <- combn(seq_len(nrow(Dataset)), 2)
Comb <- Dataset[combs[1,], ] * Dataset[combs[2,], ]
rownames(Comb) <- apply(combn(rownames(Comb), 2), 2, paste, collapse = " ")
CombSums <- rowSums(Comb)
[1,]
Gene A Gene B 10
Gene A Gene C 24
Gene A Gene D 26
Gene B Gene C 15
Gene B Gene D 13
Gene C Gene D 28
最佳答案
使用 combn
,您可以避免进行冗余计算:
mat <- as.matrix(DF)
pairs <- combn(1:nrow(DF),2)
vals <- rowSums(mat[pairs[1,],]*mat[pairs[2,],])
res <- matrix(,nrow(DF),nrow(DF),dimnames=list(rownames(DF),rownames(DF)))
res[lower.tri(res)] <- vals
# GeneA GeneB GeneC GeneD
# GeneA NA NA NA NA
# GeneB 9 NA NA NA
# GeneC 24 15 NA NA
# GeneD 26 13 28 NA
Comb
矩阵是中间结果
mat[pairs[1,],]*mat[pairs[2,],]
.
combn
里面完成,交替:
vals <- combn(rownames(DF),2,FUN=function(x)sum(apply(DF[x,],2,prod)))
DF <- read.table(header=TRUE,text="Condition1 Condition2 Condition3
GeneA 1 2 4
GeneB 3 1 1
GeneC 2 7 2
GeneD 2 2 5")
关于r - 作为双向矩阵的所有成对行积的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949695/
我是一名优秀的程序员,十分优秀!