我有一个54页的Excel工作簿。每张纸代表一个国家,是一个17 x 11的矩阵,其中行是年份,列是经济变量。
我可以使用 readxl 软件包将Excel工作簿带入R。
sheet_list <- lapply(1:54, function(i) read_excel("FDI-vs-variables.xlsx", sheet = i, na="NA"))
我的数据现在以数据框列表的形式存在,即 sheet_list ,其中每个数据框代表我的工作簿的一张纸。
接下来,我想对所有工作表/数据框上的两个变量进行相关性测试。
例如,所有工作表/数据框中的第三列是GDP,第八列是营养不良的人口百分比。我可以编写一个函数来捕获工作表/数据框中的相应列,并使用该数据运行相关性测试。
dfCorTest <- function(df){
rslt <- cor.test(df[[3]],df[[8]], method="kendall",use="pairwise")
return(rslt)
}
然后,我使用 lapply 将该功能应用于54个工作表/数据框列表中的每个工作表/数据框。
cor_results <- lapply(sheet_list, dfCorTest)
这会生成一个列表, cor_results ,详细列出了54种不同的 cor.test 运行结果。
如何从此列表中仅提取相关估计(tau)和p值?
我知道您可以使用$estimate
和$p.value
调用 cor.test 的特定结果,并且可以在 cor_results 中调用像这样的列表:
cor_results[[1]]$estimate
cor_results[[1]]$p.value
cor_results[[2]]$estimate
cor_results[[2]]$p.value
...and so on
但是有效的方法是什么?理想情况下,我希望能够写出输出类似于
的文本文件SheetNo Estimate P-value
1 3.33 0.054
2 -2.76 0.889
... ... ...
54 1.23 0.007
我知道How to extract...中也有类似的问题,但是他们使用 for循环而不是应用来运行多个相关性测试,但我无法似乎可以计算出等效的代码。
更新/编辑
以下用户 Parfait 建议的答案有效(谢谢!)。修改函数返回的内容以及 sapply 和 transpose 的组合:
dfCorTest <- function(df){
rslt <- cor.test(df[[3]], df[[8]], method="kendall", use="pairwise")
return(c(estimate = rslt$estimate,
p.value = rslt$p.value))
}
cor_results <- t(sapply(sheet_list, dfCorTest))
答案 0 :(得分:0)
考虑使用sapply
作为相关结果的矩阵输出(即 s 的简化版本),并在返回位置调整转置对象和转置t()
。结束:
dfCorTest <- function(df){
rslt <- cor.test(df[[3]], df[[8]], method="kendall", use="pairwise")
return(c(estimate = rslt$estimate,
p.value = rslt$p.value))
}
cor_results <- t(sapply(sheet_list, dfCorTest))