R t 检验 2 组,每组重复 3 次,具有多个值进行比较
R t-test 2 groups, 3 replicates each with multiple values to compare
我每组有三个样品(重复)。我想使用 T 检验来比较各组之间的值 (MappedReadsCPM)。但是,我有 4000 个值要按顺序比较(由 PeakNumber 指定)。
下一行很接近,但它并没有告诉 R 只比较 peak_1,然后只比较 peak_2,等等
t.test(MappedReadsCPM~Group, data=subset(data2, Group %in% c("1", "2")))$p.value
我不想打印 4000 个 p 值 - 理想情况下我可以将它们添加到数据框中。
pvalues <- t.test(MappedReadsCPM~Group, data=subset(data2, Group %in% c("1", "2")))$p.value
数据2
PeakNumber Sample Group MappedReadsCPM
peak_1 A 1 43.53819
peak_2 A 1 49.20722
peak_3 A 1 38.54943
peak_4 A 1 99.09472
peak_1 B 2 105.21728
peak_2 B 2 42.63114
peak_3 B 2 78.00591
peak_4 B 2 74.37773
peak_1 C 2 509.30606
peak_2 C 2 101.36234
peak_3 C 2 25.17051
peak_4 C 2 32.8804
peak_1 D 1 35.37478
peak_2 D 1 89.11722
peak_3 D 1 112.24688
peak_4 D 1 386.40139
peak_1 E 3 631.07692
peak_2 E 3 162.58791
peak_3 E 3 46.93961
peak_4 E 3 56.69035
peak_1 F 2 38.7762
peak_2 F 2 261.45587
peak_3 F 2 43.99171
peak_4 F 2 72.11012
peak_1 G 1 118.5962
peak_2 G 1 250.1178
peak_3 G 1 84.35
peak_4 G 1 386.40139
您可以使用 sapply
遍历数据中的所有独特峰并将数据子集化到该特定峰:
pvalues <- sapply(unique(data2$PeakNumber), function(peak){
t.test(MappedReadsCPM~Group, data=subset(data2, Group %in% c("1", "2") & PeakNumber == peak))$p.value
})
在您的数据中,Group == 3
的 t 检验似乎不能 运行。所以我首先对数据进行子集化以仅保留第 1 组和第 2 组。
df_12 <- subset(df1, Group != 3)
现在 split
通过 PeakNumber
然后 lapply
测试。输出是测试结果列表。
sp <- split(df_12, df_12$PeakNumber)
t_list <- lapply(sp, function(DF){
t.test(MappedReadsCPM ~ Group, data = DF)
})
这将从上面的结果中提取 p 值。
pvals <- sapply(t_list, '[[', 'p.value')
pvals
# peak_1 peak_2 peak_3 peak_4
#0.4105493 0.9526529 0.3357703 0.1348856
最后清理。
rm(df_12, sp)
我每组有三个样品(重复)。我想使用 T 检验来比较各组之间的值 (MappedReadsCPM)。但是,我有 4000 个值要按顺序比较(由 PeakNumber 指定)。 下一行很接近,但它并没有告诉 R 只比较 peak_1,然后只比较 peak_2,等等
t.test(MappedReadsCPM~Group, data=subset(data2, Group %in% c("1", "2")))$p.value
我不想打印 4000 个 p 值 - 理想情况下我可以将它们添加到数据框中。
pvalues <- t.test(MappedReadsCPM~Group, data=subset(data2, Group %in% c("1", "2")))$p.value
数据2
PeakNumber Sample Group MappedReadsCPM
peak_1 A 1 43.53819
peak_2 A 1 49.20722
peak_3 A 1 38.54943
peak_4 A 1 99.09472
peak_1 B 2 105.21728
peak_2 B 2 42.63114
peak_3 B 2 78.00591
peak_4 B 2 74.37773
peak_1 C 2 509.30606
peak_2 C 2 101.36234
peak_3 C 2 25.17051
peak_4 C 2 32.8804
peak_1 D 1 35.37478
peak_2 D 1 89.11722
peak_3 D 1 112.24688
peak_4 D 1 386.40139
peak_1 E 3 631.07692
peak_2 E 3 162.58791
peak_3 E 3 46.93961
peak_4 E 3 56.69035
peak_1 F 2 38.7762
peak_2 F 2 261.45587
peak_3 F 2 43.99171
peak_4 F 2 72.11012
peak_1 G 1 118.5962
peak_2 G 1 250.1178
peak_3 G 1 84.35
peak_4 G 1 386.40139
您可以使用 sapply
遍历数据中的所有独特峰并将数据子集化到该特定峰:
pvalues <- sapply(unique(data2$PeakNumber), function(peak){
t.test(MappedReadsCPM~Group, data=subset(data2, Group %in% c("1", "2") & PeakNumber == peak))$p.value
})
在您的数据中,Group == 3
的 t 检验似乎不能 运行。所以我首先对数据进行子集化以仅保留第 1 组和第 2 组。
df_12 <- subset(df1, Group != 3)
现在 split
通过 PeakNumber
然后 lapply
测试。输出是测试结果列表。
sp <- split(df_12, df_12$PeakNumber)
t_list <- lapply(sp, function(DF){
t.test(MappedReadsCPM ~ Group, data = DF)
})
这将从上面的结果中提取 p 值。
pvals <- sapply(t_list, '[[', 'p.value')
pvals
# peak_1 peak_2 peak_3 peak_4
#0.4105493 0.9526529 0.3357703 0.1348856
最后清理。
rm(df_12, sp)