我有一个由两组组成的数据集,我想看看Age与我的两个组g1和g2的所有自变量的相关性。最后,我想绘制结果以比较我收到的两组相关值。
到目前为止,我已经这样做了:
corg1 = data.frame('rho'=rep(NA,length(vars)),'p.value'=rep(NA,length(vars)))
#vars = list of variables I'm interested in
corg1$rho = apply(data[g1,vars],2,function (x) { cor.test(x,data$Age[g1],method='spearman')$estimate })
corg1$p.value = apply(data[g1,vars],2,function (x) {cor.test(x,data$Age[g1],method='spearman')$p.value})
然后我用接收结果的不同数据帧重复g2的过程。
corg2 = data.frame('rho'=rep(NA,length(vars)),'p.value'=rep(NA,length(vars)))
#vars = list of variables I'm interested in
corg2$rho = apply(data[g2,vars],2,function (x) { cor.test(x,data$Age[g2],method='spearman')$estimate })
corg2$p.value = apply(data[g2,vars],2,function (x) {cor.test(x,data$Age[g2],method='spearman')$p.value})
这给了我2个数据帧,我假设它们的排序方式相似,这似乎足够安全,但似乎没必要运行两次cor.test并剥离我想要的那块。我也可以只使用一个数据帧来捕获所有结果 - g1的两列和g2的两列。不过,我确信我错过了什么。
我很感激任何建议让这更像R。
答案 0 :(得分:2)
类似的东西:
results <- apply(data,2,function (x) {
ctg1 <- cor.test(x[g1,vars],data$Age[g1],method='spearman')
ctg2 <- cor.test(x[g2,vars],data$Age[g2],method='spearman')
c(rho1 = ctg1$estimate, rho2 = ctg2$estimate, p.value1 = ctg1$p.value, p.value2 = ctg2$p.value)
}
)
你可以为每个变量组合做一次cor.test()
并提取你需要的部分。 apply()
会将内容粘贴到矩阵中。 (您可能还需要传递g1
,g2
和vars