对于 R 中的循环相关测试

For Loop Correlation Test in 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))

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

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)