r - 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、...),那也很好。我想可以在函数输入参数中调整它非常感谢,
切里奥,纳丁
解决方案
如果没有关于您的数据的更多信息,很难具体说明,但这里有一个使用iris
R 中包含的数据集的示例。它对三种虹膜中的每一种都有不同的测量值。基本步骤是将数据框拆分为包含三个数据框的列表,每个物种一个。然后使用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)
推荐阅读
- asp.net - 如何在 ASP.NET 中从数据库中保存和检索图像
- python - 找到动态加载的文本 Python Selenium WebDriver
- css - Flexbox - 图像和内容
- android - RecyclerView + NestedScrollView + BottomSheetBehavior = 性能不佳?
- javascript - 使用javascript获取每个表列值
- angular-guards - 在 Angular 4 防护中使用服务
- android - Android,从 Firebase 查询数据后无法初始化对象
- python - 如何计算网格上的复合函数?
- angular - 无法在实时服务器上的生产环境中部署 Angular 4
- javascript - 一些 lodash 函数没有定义