我在矩阵中有94个变量(样本+蛋白质+组)和172个观察值,如下所示:

Sample   Protein1   Protein2 ... Protein92 Group
1          1.53      3.325   ...   5.63      0
2          2.32      3.451   ...   6.32      0
.
.
.
103        3.24      4.21    ...   3.53      0
104        3.44      5.22    ...   6.78      1
.
.
.
192        6.75      4.34    ...   6.15      1


有些样本在第0组中,有些样本在第1组中。我想使用t检验测试第0组和第1组之间是否有差异,我想对所有蛋白质进行此处理。我当时在考虑使用应用程序,但是我不确定如何使用它。
而且名称不是Protein1,protein2 ...,它的名称要长得多,所以我不想全部写出来。

我也只想要矩阵中每种蛋白质的p值,如下所示:

Protein  p-value
Protein1   0.00563
Protein2   0.0640
.
.
Protein92  0.610


或类似的东西,这样我以后就可以找到p值小于0.05 / 92的那些。



编辑:

以长格式开始工作,这不再是问题了:

library(tidyverse)

df %>%
gather(Protein, Value,-Sample,-Group)) %>%
group_by(Protein) %>%
do(broom::tidy(t.test(Value ~ Group, data = .))) %>%
ungroup() %>%
mutate(Adjusted_pval = p.adjust(p.value, method = "fdr"))

最佳答案

尝试类似的方法:

sapply(df[,2:93], function(i) t.test(i ~ df$Group)$p.value)


将返回一个p.value数组。

您可以将其存储为data.frame并通过执行以下操作查找低p值:

x <- data.frame(p.value= sapply(df[,2:93], function(i) t.test(i ~ df$Group)$p.value))
x$protein_name <- rownames(x) # edit: new column for protein_name
rownames(x) <- NULL           # edit: new column for protein_name
x[x$p.value < 0.05/92,]


请注意,数组元素的名称和数据框的行名称保留了Protein1,Protein2等。编辑:我为每个OP意向添加了一个蛋白质名称列,并将其从行名称中删除,因此它在

附言高兴地看到您正在调整多个比较的p值。

08-19 23:48