通过列索引和使用应用或循环在 R 中执行 t.test

do t.test in R by column indexing and using apply or loop

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

X;

Cross   Rep Block   Viability
1F  1   1   0.8333333
1F  2   1   0.8333333
1F  3   1   0.8
1M  1   1   0.8333333
1M  2   1   0.8666667
1M  3   1   1
2M  1   1   0.9333333
2M  2   1   0.8666667
2M  3   1   0.8333333
3M  1   1   0.9333333
3M  2   1   0.9
3M  3   1   0.9
4M  1   1   0.8333333
4M  2   1   0.9666667
4M  3   1   0.9333333
5M  1   1   0.9666667
5M  2   1   0.9666667
5M  3   1   0.9

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

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

如果我们需要得到与单独比较相同的结果,我们必须改变pairwise.t.test

中的p.adjpairedpool.sd等]

通过个体比较,

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
#...

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