【问题标题】:Correlation function over multiple data frames in RR中多个数据帧的相关函数
【发布时间】:2021-04-28 16:09:57
【问题描述】:

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

Rcode:

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 等),那也很好。我想可以在函数输入参数中调整它 非常感谢,

切里奥, 纳丁

【问题讨论】:

  • 尝试阅读此处的“许多模型”一章,看看是否能给您一些启发? r4ds.had.co.nz
  • 嗨,谢谢,我一定会去看看。谢谢!

标签: r function


【解决方案1】:

如果没有关于您的数据的更多信息,很难具体说明,但这里有一个使用 R 包含的数据集 iris 的示例。它对三种虹膜中的每一种都有不同的测量值。基本步骤是将数据框拆分为包含三个数据框的列表,每个物种一个。然后使用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)

【讨论】:

  • 谢谢,这看起来像是我的解决方案。抱歉,我不知道如何分享我的数据。以后我会附上这个案例的模拟数据。会让你知道它是否有效。非常感谢:)
  • 好的,这正是我想要的。我不知道为什么我会以如此混乱的方式思考。非常感谢,我现在很开心!
猜你喜欢
  • 1970-01-01
  • 2017-09-03
  • 2020-11-06
  • 2014-03-27
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
相关资源
最近更新 更多