以下是我的问题的一些示例数据:
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
这样的软件包,不应该有更简洁和优雅的方式来做到这一点吗?
任何想法都受到高度赞赏。
答案 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