【问题标题】:Compute one sample t-test for each column of a data frame and summarize results in a table为数据框的每一列计算一个样本 t 检验并在表格中汇总结果
【发布时间】:2013-06-29 20:14:03
【问题描述】:

以下是关于我的问题的一些示例数据:

mydf <- data.frame(A = rnorm(20, 1, 5),
                   B = rnorm(20, 2, 5),
                   C = rnorm(20, 3, 5),
                   D = rnorm(20, 4, 5),
                   E = rnorm(20, 5, 5))

现在我想对 data.frame 的每一列进行单样本 t 检验,以证明它是否与零有显着差异,例如 t.test(mydf$A),然后存储每一列的平均值,即新数据帧中的 t 值和 p 值。所以结果应该是这样的:

      A    B    C    D    E
mean  x    x    x    x    x
t     x    x    x    x    x
p     x    x    x    x    x

我绝对可以想出一些乏味的方法来做到这一点,比如循环遍历mydf,计算参数,然后循环遍历新的 data.frame 并插入值。
但是手头有 plyr 这样的包,难道不应该有更简洁优雅的方式来做到这一点吗?

高度赞赏任何想法。

【问题讨论】:

  • 如果您使用的是regressThis 也可能对您有所帮助。

标签: r dataframe plyr


【解决方案1】:

尝试这样的事情,然后从结果表中提取您想要的结果:

results <- lapply(mydf, t.test)
resultsmatrix <- do.call(cbind, results)
resultsmatrix[c("statistic","estimate","p.value"),]

给你:

          A         B          C            D           E           
statistic 1.401338  2.762266   5.406704     3.409422    5.024222    
estimate  1.677863  2.936304   5.418812     4.231458    5.577681    
p.value   0.1772363 0.01240057 3.231568e-05 0.002941106 7.531614e-05

【讨论】:

    【解决方案2】:

    data.table 解决方案:

    library(data.table)
    DT <- as.data.table(mydf)
    DT[,lapply(.SD,function(x){
             y <- t.test(x)
             list(p = round(y$p.value,2),
                  h = round(y$conf.int,2),
                  mm = round(y$estimate,2))})]
    
               A          B         C         D         E
    1:        0.2       0.42      0.01         0         0
    2: -0.91,3.98 -1.15,2.62 1.19,6.15 2.82,6.33 2.68,6.46
    3:       1.54       0.74      3.67      4.57      4.57
    

    【讨论】:

    • 拥有行名可能会很好。另外,我尝试格式化您的代码,但它只需要回车即可正确格式化,所以我没有达到 6 个字符的最小编辑。
    • @Thomas 谢谢。我不在。但是 data.table 中没有行名。
    • 与@Thomas 的解决方案相比,data.table 的概念优势是否证明了附加代码的合理性?
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 2020-09-05
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多