从多个 cor.test() 中提取估计值和 P 值导致 R
Extracting Estimate and P-value from multiple cor.test() results in R
我有一个 Excel 工作簿,其中有 54 个 sheet。每个 sheet 代表一个国家,是一个 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,其中每个数据框代表我工作簿中的一个 sheet。
接下来,我想 运行 对所有 sheets/dataframes 中我想要的两个变量进行相关性测试。
例如,所有 sheets/dataframes 中的第三列是 GDP,第八列是营养不良人口的百分比。我可以编写一个函数,使用该数据在 sheet/dataframe 和 运行 中获取相应的列进行相关测试。
dfCorTest <- function(df){
rslt <- cor.test(df[[3]],df[[8]], method="kendall",use="pairwise")
return(rslt)
}
然后我使用 lapply 将该函数应用于我的 54 sheets/dataframes 列表中的每个 sheet/dataframe。
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
我知道 中也有人问过类似的问题,但他们使用 for 循环 而不是 lapply 到 运行 多重相关测试,我似乎无法计算出等效代码。
UPDATE/EDIT
下面用户 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))
考虑使用 sapply
作为相关结果的矩阵输出(即 s 简化版本),并调整 return 对象和转置, 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))
我有一个 Excel 工作簿,其中有 54 个 sheet。每个 sheet 代表一个国家,是一个 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,其中每个数据框代表我工作簿中的一个 sheet。
接下来,我想 运行 对所有 sheets/dataframes 中我想要的两个变量进行相关性测试。
例如,所有 sheets/dataframes 中的第三列是 GDP,第八列是营养不良人口的百分比。我可以编写一个函数,使用该数据在 sheet/dataframe 和 运行 中获取相应的列进行相关测试。
dfCorTest <- function(df){
rslt <- cor.test(df[[3]],df[[8]], method="kendall",use="pairwise")
return(rslt)
}
然后我使用 lapply 将该函数应用于我的 54 sheets/dataframes 列表中的每个 sheet/dataframe。
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
我知道
UPDATE/EDIT
下面用户 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))
考虑使用 sapply
作为相关结果的矩阵输出(即 s 简化版本),并调整 return 对象和转置, 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))