【问题标题】:cor.test into data.frame in Rcor.test 到 R 中的 data.frame
【发布时间】:2014-04-11 21:21:45
【问题描述】:

考虑以下示例:

require(MuMIn)
data(Cement)
d <- data.frame(Cement)

idx <- seq(11,13)
cor1 <- list()
for (i in 1:length(idx)){
  d2 <- d[1:idx[i],]
  cor1[[i]] <- cor.test(d2$X1,d2$X2, method = "pearson")
}
out <- lapply(cor1, function(x) c(x$estimate, x$conf.int, x$p.value))

在这里,我计算迭代循环中数据集的相关性。

我知道想要生成一个由“out”列表中的值组成的 data.frame。我尝试使用

df <- do.call(rbind.data.frame, out)

但结果似乎不对:

> df
  c.0.129614123011664..0.195326511912326..0.228579470307565.
1                                                  0.1296141
2                                                  0.1953265
3                                                  0.2285795
  c..0.509907346173941...0.426370467476045...0.368861726657293.
1                                                    -0.5099073
2                                                    -0.4263705
3                                                    -0.3688617
  c.0.676861607564929..0.691690831088494..0.692365536706126.
1                                                  0.6768616
2                                                  0.6916908
3                                                  0.6923655
  c.0.704071702633775..0.542941653020805..0.452566184329491.
1                                                  0.7040717
2                                                  0.5429417
3                                                  0.4525662

这不是我所追求的。

如何生成一个 data.frame,它的第一列表示计算了 cor.test 的列表,即在这种情况下为 1 到 3,第二列指的是 $estimate,然后是 $conf.int 和 %p .value 产生一个五列 data.frame。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    这是你想要做的吗?你的问题有点难以理解。列表中的一列索引真的有必要吗?整个第一列将与行名完全相同(显示在左侧)。

    > D <- data.frame(cbind(index = seq(length(out)), do.call(rbind, out)))
    > names(D)[2:ncol(D)] <- c('estimate', paste0('conf.int', 1:2), 'p.value')
    > D
      index  estimate  conf.int1 conf.int2   p.value
    1     1 0.1296141 -0.5099073 0.6768616 0.7040717
    2     2 0.1953265 -0.4263705 0.6916908 0.5429417
    3     3 0.2285795 -0.3688617 0.6923655 0.4525662
    

    【讨论】:

      【解决方案2】:

      不完全清楚你在问什么......你有这样一个数据框,只是没有合理的列名。您可以将代码简化为 ..

      ctests <- lapply(idx, function(x) cor.test(d[1:x,"X1"], d[1:x, "X2"]))
      ctests <- lapply(ctests, "[", c("estimate", "conf.int", "p.value"))
      as.data.frame(do.call(rbind, lapply(ctests, unlist)))
      #   estimate.cor  conf.int1 conf.int2   p.value
      # 1    0.1296141 -0.5099073 0.6768616 0.7040717
      # 2    0.1953265 -0.4263705 0.6916908 0.5429417
      # 3    0.2285795 -0.3688617 0.6923655 0.4525662
      

      这是你需要的吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2013-01-17
        • 2020-05-27
        相关资源
        最近更新 更多