首页 > 解决方案 > R中多个数据帧的相关函数

问题描述

我有点卡在我的数据分析中。我有多个数据框需要进行相关性分析。我想将 cor.test 的参数打包到数据框列表中。每个数据框都是由一个因子变量拆分的数据框的产物,并且仅包含 2 个变量(感兴趣的变量)。我需要在整个研究项目中对几个变量执行此操作,因此将来最好为它提供一个函数。

R代码:

get_correlation_parameters <- function(objectname,factorvar){
  datalist <- mget(ls(pattern = print(objectname))) 
 parameters <- list()
  for (i in 1:length(factorvar)) {
    x <- datalist[[i]][,1]
    y <- datalist[[i]][,2]
    test <- cor.test(x,y)
    DF <- data.frame(test$estimate, test$conf.int, test$p.value)
    parameters <- c(parameters, DF[i]) }
}

有人可以帮我找出错误吗?我尝试了很多事情,但我无法克服自己的偏见。如果我可以轻松地指定用于相关统计的方法(例如 pearson、spearman、...),那也很好。我想可以在函数输入参数中调整它非常感谢,

切里奥,纳丁

标签: rfunction

解决方案


如果没有关于您的数据的更多信息,很难具体说明,但这里有一个使用irisR 中包含的数据集的示例。它对三种虹膜中的每一种都有不同的测量值。基本步骤是将数据框拆分为包含三个数据框的列表,每个物种一个。然后使用lapply三次,一次运行相关性检验,第二次提取所需的统计数据,第三次因为置信区间是向量而不是标量值。希望这将类似于您的数据组织:

data(iris)
iris.lst <- split(iris[, 1:2], iris$Species)
results.lst <- lapply(iris.lst, function(x) cor.test(x[, 1], x[, 2], method="pearson"))
results.stats <- lapply(results.lst, "[", c("estimate", "conf.int", "p.value"))
stats <- do.call(rbind, lapply(results.stats, unlist))
stats
#            estimate.cor conf.int1 conf.int2      p.value
# setosa        0.7425467 0.5851391 0.8460314 6.709843e-10
# versicolor    0.5259107 0.2900175 0.7015599 8.771860e-05
# virginica     0.4572278 0.2049657 0.6525292 8.434625e-04

stats对象是一个矩阵,要将其转换为数据框,请使用:

stats <- data.frame(stats)

推荐阅读