我必须使用大数据框进行基因组分析。每个数据帧都有500k行和100列。这100列代表每种基因的测量值。我想要做的是计算两个数据农场中所有100个值的每个基因的Spearman相关系数。 例如:
df1
genename x1 x2 x3 ..............x100
gene1 0.236 0.589 0.896 0.789
gene2 -0.361 0.782 0.583 0.478
df2
genename x1 x2 x3 ...............x100
gene1 0.101 0.256 0.026 0.0.56
gene2 -0.231 0.569 0.158 0.0223
我想在这里例如找到所有100个obs的gene1的所有相关系数。这意味着每个基因应该有100个相关性coff
答案 0 :(得分:0)
措辞"我将为每个基因提供100个相关系数"因为每一行被标记为geneX而你的描述使得它听起来像你试图找到df1中的xX和df2中的xX之间的相关系数,其中行将是你的观察结果。假设你试图找到类似标记的df1
和df2
行之间的Spearman相关性(即df1和df2中gene1之间的相关性),可以这样做:
m1 <- as.matrix(df1)
m2 <- as.matrix(df2)
res <- c()
for (i in 1:nrow(m1)) {
res <- c(res, cor(m1[i,], m2[i,], method = "spearman")))
}
考虑到data.frames的大小,这可能需要一些时间。在我的机器上执行100000行矩阵大约需要20秒。如果您有权访问多个核心,则可能需要查看mclapply
。