为数据框的每一列计算一个样本t检验,并在表格中汇总结果

时间:2013-06-29 20:14:04

标签: r dataframe plyr

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

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这样的软件包,不应该有更简洁和优雅的方式来做到这一点吗?

任何想法都受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

尝试这样的方法,然后从结果表中提取所需的结果:

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

答案 1 :(得分:1)

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
相关问题