【发布时间】:2013-10-18 22:18:11
【问题描述】:
我有一个数据框 M,我想计算 M 的列之间的所有成对相关性。我可以使用应用函数轻松完成此操作,例如
pvals = laply(M, function(x) llply(M, function(y) cor.test(x, y)$p.value))
但是,由于 x 和 y 之间的相关性与 y 和 x 之间的相关性相同,因此该解决方案所做的工作量是所需工作的 2 倍。
我正在寻找一种快速、简单的方法来计算唯一列对之间的所有相关性。我希望结果是一个 NxN 矩阵,其中 N=ncol(M)。我在 Stack Overflow 上搜索了很长时间,但找不到任何这样做的东西。谢谢!
【问题讨论】:
-
我考虑过在 i=1:n 和 j=1:i 上使用 apply 语句,但是我无法将所有内容映射回 NxN 矩阵中的正确位置。如果有人知道如何做到这一点,它将解决我的问题。谢谢!
-
你能做一个小的示例数据集吗,
M? -
?expand.grid和?combn并且这些肯定已经被问过,所以你真的应该按照要求进行一些搜索。 -
我不知道相关性(对角线上的 1)和 cor.test 的输出(对角线上的 0)之间的区别。如果你想要前者,有一种简单的方法可以使用矩阵乘法。
-
是的! x = data.frame(复制(10,rnorm(25)));行名(x)= 1:25; colnames(x) = 字母[1:10]。然后,我想得到 a,b,...,j 之间的所有相关性。
标签: r plyr apply correlation lapply