【发布时间】:2022-01-01 16:13:56
【问题描述】:
我在 R 中有三个数据框,我们称它们为 A、B 和 C。 数据框 C 包含两列,第一列包含数据框 A 中的各种行名,第二列包含数据框 B 中的行名:
C <- data.frame(col1 = c("a12", "a9"), col2 = c("b6","b54"))
我想使用表 A 和 B 的行中的相应值计算表 C 的每一行的相关系数和 p 值(即将表 A 中 a12 行中的值与 b6 行中的值相关联来自表 B,来自表 A 的 a9 行和来自表 B 的 b54 行等)并将结果值放在表 C 的其他列中。这是我当前的幼稚且效率极低的代码:
for (i in 1:nrow(C)) {
correlation <- cor.test(unlist(A[C[i,1],]), unlist(B[C[i,2],]), method = "spearman")
C[i,3] <-correlation$estimate
C[i,4] <- correlation$p.value
}
主要问题是,对于我目前的大型数据集,这种分析实际上可能需要几个月的时间。所以我正在寻找一种更有效的方法来完成这项任务。我还使用“Hmisc”包尝试了以下代码,但我正在处理的服务器无法处理大向量:
A <- t(A)
B <- t(B)
ind.A <- match(C[,1], colnames(A))
A<- A[,ind.A]
ind.B <- match(C[,2], colnames(B))
B<- B[,ind.B]
C[,3]<- diag(rcorr(as.matrix(A),as.matrix(B),type = "spearman")$r[c(1:ncol(A)),c(1:ncol(A))])
C[,4]<- diag(rcorr(as.matrix(A),as.matrix(B),type = "spearman")$P[c(1:ncol(A)),c(1:ncol(A))])
【问题讨论】:
-
加速它的一种方法是使用并行化。看看下面的帖子是否有帮助stackoverflow.com/questions/46532657/…
-
非常感谢您的指导。这种方法将我的分析速度加快了大约 4 倍
标签: r performance correlation