2

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

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 -新data.frame中的值。所以结果应该是这样的:

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

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

4

2 回答 2

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
于 2013-06-29T20:24:07.163 回答
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
于 2013-06-29T20:37:55.280 回答