通过列索引和使用应用或循环在 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.adj
、paired
、pool.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
#...
注意:仍然存在一些舍入差异(如果可以的话)
有没有办法通过使用列作为索引在 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.adj
、paired
、pool.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
#...
注意:仍然存在一些舍入差异(如果可以的话)