【问题标题】:Extracting Estimate and P-value from multiple cor.test() results in R从多个 cor.test() 中提取估计值和 P 值导致 R
【发布时间】:2019-03-18 19:30:39
【问题描述】:

我有一个包含 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 循环 而不是 lapply 来运行多个相关测试,我似乎无法算出等价的代码。

更新/编辑

以下用户 Parfait 建议的答案有效(谢谢!)。修改函数返回的内容以及 sapplytranspose 的组合:

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))

【问题讨论】:

    标签: r function lapply readxl


    【解决方案1】:

    考虑将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))
    

    Rextester Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2013-10-12
      • 1970-01-01
      相关资源
      最近更新 更多