通过列索引并使用apply或loop在R中执行t.test

时间:2016-02-01 15:35:46

标签: r for-loop statistics apply

有没有办法在R中使用列作为索引进行多重t检验? 我想通过索引x $ Cross到1F对x $可行性进行t测试。因此将1M,2M等与1F进行比较。我知道我可以单独做这个,但有没有办法循环或申请这个? 这是下面的数据

printsTable

1 个答案:

答案 0 :(得分:2)

我们可以使用任何一组操作

library(data.table)
setDT(X)[, t.test(Viability)$p.value, by = Cross]
#    Cross           V1
#1:    1F 0.0001825647
#2:    1M 0.0031854465
#3:    2M 0.0011197313
#4:    3M 0.0001486875
#5:    4M 0.0019277856
#6:    5M 0.0005531744

我们可以pairwise.t.test查看更新后的问题

res <- with(X, pairwise.t.test(Viability, Cross))
res$p.value
#           1F 1M 2M 3M 4M
# 1M 1.0000000 NA NA NA NA
# 2M 1.0000000  1 NA NA NA
# 3M 0.9260886  1  1 NA NA
# 4M 0.9260886  1  1  1 NA
# 5M 0.2501720  1  1  1  1

如果我们需要获得与个别比较相同的结果,我们必须更改p.adj

中的pairedpool.sdpairwise.t.test

通过个人比较,

t.test(X$Viability[X$Cross=='1F'], 
          X$Viability[X$Cross=='1M'])$p.value
 #[1] 0.2636938

使用pairwise.t.test

with(X, pairwise.t.test(Viability, Cross, p.adj='none', 
         paired=FALSE, pool.sd=FALSE))$p.value
#                1F        1M        2M        3M        4M
#1M 0.263693796        NA        NA        NA        NA
#...

注意:仍然存在一些舍入差异(如果可以的话)