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

通过列索引和使用apply或loop在R中进行t.test,r,for-loop,statistics,apply,R,For Loop,Statistics,Apply,有没有一种方法可以通过使用列作为索引在R中进行多个t测试? 我想通过索引x$Cross到1F,对x$savity进行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.866

有没有一种方法可以通过使用列作为索引在R中进行多个t测试? 我想通过索引x$Cross到1F,对x$savity进行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

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

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

很抱歉,这不适用于我需要的内容,但请参见新编辑。基于这个答案,我还不够清楚。@Akrun为什么我在使用你的方法时得到不同的p值,而不是单独使用它们?即,当我取所有三个1F值(生存能力)并与所有1M值进行比较时。我用这个etDT(Nicdata)[,pairwise.t.test(Viability,Cross,p.adj=“none”,paired=FALSE)]得到了0.102的p值,但当我做一个正常的t.test时,我得到了p值=0.2099。@Genetics有一个多重比较的调整@akrun,我看到了,但我没有关闭这个p.adj=“none”?这很有效,谢谢。在这一点上,四舍五入是由于一个简单的两样本t检验与韦尔奇t检验。这是可以解释的。干杯
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
#...