非常感谢任何有关以下问题的帮助;
我试图使用R来查找1个特定行数据与数据集中每隔一行的Pearsons系数(单独),以确定哪些行与感兴趣的行具有显着相关性。 数据框由20列和50,000行组成,数据本身由数值组成。 cor.test或其他适当的功能是否可以通过这种方式实现?
答案 0 :(得分:2)
首先,我建议将输入对象重新格式化为矩阵而不是data.frame。
您可以使用apply()
迭代矩阵的所有行,并在当前行和感兴趣的行之间运行cor()
。这将产生相关矢量。
在下面的代码中,我生成一个包含20列和50,000行的随机矩阵m
,并将感兴趣的行存储在ri
中。然后,我们可以使用行边距(即apply()
)调用MARGIN=1L
,以针对感兴趣的行cor()
在每行上调用m[ri,]
。
您可以选择包含或排除迭代的感兴趣行。在下面的代码示例中,我将其包含在内,这会导致元素保证在结果向量ri
中的索引res
处具有值1。这种选择的一个很好的副作用是结果向量的长度为50,000,与输入矩阵中的行数相同,因此索引将对齐。如果您选择将其排除,可以通过将m[-ri,]
传递到apply()
调用而不仅仅m
来完成,结果向量的长度为49,999,其元素将不再对齐与输入矩阵的行。
NR <- 50e3L; NC <- 20L; m <- matrix(runif(NR*NC),NR);
ri <- 2L; res <- apply(m,1L,cor,m[ri,]);
str(res);
## num [1:50000] -0.074 1 0.201 -0.0467 0.2097 ...
summary(res);
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.806700 -0.158500 0.001143 0.001114 0.160800 1.000000
您可以将cor()
替换为cor.test()
以获取后者提供的其他信息,但代价是稍长的运行时间和更复杂的结果对象(列表而不是原子矢量)。
答案 1 :(得分:1)