找出两个大数据帧之间的相关系数

时间:2018-05-24 14:26:46

标签: r

我必须使用大数据框进行基因组分析。每个数据帧都有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

1 个答案:

答案 0 :(得分:0)

措辞"我将为每个基因提供100个相关系数"因为每一行被标记为geneX而你的描述使得它听起来像你试图找到df1中的xX和df2中的xX之间的相关系数,其中行将是你的观察结果。假设你试图找到类似标记的df1df2行之间的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