首页 > 解决方案 > R中的循环相关测试

问题描述

我想运行一个 for 循环来对我的数据框进行多个相关测试。我的数据框中也有 NA,所以我也想省略!

这是我的数据框的一部分。它更广泛,但其中的一小部分更容易理解。

name: carsdataframe
      price      mph      maxmph      model year      status
1      NA        60        100          2013          1
2      NA         57        96          2019          0
3      5.2        52        NA          2017          1

我想做我目前拥有的:

for (i in c(1:4)){
    colcor <- colnames(carsdataframe[i])
    coresult <- cor.test(carsdataframe$colcor,carsdataframe$"status",use="pairwise.complete.obs")
    finalcor <- c(coresult, colcor)
}
colcor

然而,这段代码不起作用,我看到“'x' 和 'y' 必须具有相同的长度”。我想知道如何为它编码。我应该修复什么?

抱歉,如果我犯了业余错误,我刚开始使用 R!提前谢谢你!:)

carsdataframe <- structure(list(price = c(NA, NA, 5.2), mph = c(60L, 57L, 52L), 
    maxmph = c(100L, 96L, NA), model_year = c(2013L, 2019L, 2017L
    ), status = c(1L, 0L, 1L)), class = "data.frame", row.names = c(NA, 
-3L))

标签: rcorrelation

解决方案


当列名存储在变量中时,不要使用$,使用[[将列值提取为向量。您可以使用lapply类似于for循环的哪个。

list_data <- lapply(names(carsdataframe), function(x) 
  cor.test(carsdataframe[[x]],carsdataframe$status,use="pairwise.complete.obs"))

您可以使用sapply/lapply来提取特定的统计信息。例如 - 让p.value你可以这样做:

sapply(list_data,`[[`, 'p.value')
#Or
#sapply(list_data,function(x) x$p.value)

要计算每个变量组合之间的相关性,您可以计算list_data为:

list_data <- combn(names(carsdataframe), 2, function(x)  
 cor.test(carsdataframe[[x[1]]],
          carsdataframe[[x[2]]],use="pairwise.complete.obs"), simplify = FALSE)

推荐阅读