如何批量计算每个Accession在多条件组合下的p值?
批量计算不同条件组合的t检验p值
针对你提供的两种数据框结构,分别给出批量计算每个Accession的三组两两t检验p值的方法:
第一种数据框(宽格式,每行对应一个Accession,各条件重复为独立列)
直接按行提取各条件的重复值,用rowwise()逐行计算:
library(dplyr) # 加载数据 df1 <- structure(list(Accession = c("AAAAA", "MYDDD", "STDTTT"), First_Rep1 = c(24.8432602, 33.36984063, 30.93297676), First_Rep2 = c(25.16806123, 33.59779257, 31.71292828), Condition1_Rep1 = c(28.74214021, 36.89735285, 35.67871257 ), Condition1_Rep2 = c(28.68311263, 37.12617154, 35.89283737), Condition2_Rep1 = c(28.60045356, 36.85154916, 35.3600596), Condition2_Rep2 = c(27.5609252, 36.25666317, 34.87004551)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame")) # 批量计算p值 result1 <- df1 %>% rowwise() %>% mutate( First_Condition1_pvalue = t.test(c(First_Rep1, First_Rep2), c(Condition1_Rep1, Condition1_Rep2))$p.value, First_Condition2_pvalue = t.test(c(First_Rep1, First_Rep2), c(Condition2_Rep1, Condition2_Rep2))$p.value, Condition1_Condition2_pvalue = t.test(c(Condition1_Rep1, Condition1_Rep2), c(Condition2_Rep1, Condition2_Rep2))$p.value ) %>% ungroup() %>% select(Accession, First_Condition1_pvalue, First_Condition2_pvalue, Condition1_Condition2_pvalue) print(result1)
第二种数据框(每个Accession对应两行重复,各条件为独立列)
先将数据转成长格式,再按Accession分组计算:
library(dplyr) library(tidyr) # 加载数据 df2 <- structure(list(Accession = c("AAAAA", "AAAAA", "MYDDD", "MYDDD", "STDTTT", "STDTTT"), grp = c("Rep1", "Rep2", "Rep1", "Rep2", "Rep1", "Rep2"), First = c(24.8432602, 25.16806123, 33.36984063, 33.59779257, 30.93297676, 31.71292828), Condition1 = c(28.74214021, 28.68311263, 36.89735285, 37.12617154, 35.67871257, 35.89283737 ), Condition2 = c(28.60045356, 27.5609252, 36.85154916, 36.25666317, 35.3600596, 34.87004551)), class = "data.frame", row.names = c(NA, -6L)) # 转换为长格式 df2_long <- df2 %>% pivot_longer(cols = c(First, Condition1, Condition2), names_to = "Condition", values_to = "Value") # 分组计算p值 result2 <- df2_long %>% group_by(Accession) %>% summarise( First_Condition1_pvalue = t.test(Value[Condition == "First"], Value[Condition == "Condition1"])$p.value, First_Condition2_pvalue = t.test(Value[Condition == "First"], Value[Condition == "Condition2"])$p.value, Condition1_Condition2_pvalue = t.test(Value[Condition == "Condition1"], Value[Condition == "Condition2"])$p.value ) %>% ungroup() print(result2)
补充说明
- 若需要调整t检验参数(如假设方差齐性),可在
t.test()中添加var.equal = TRUE参数; - 两种方法输出结果均符合你要求的格式。
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

