基本上,我试图制作一系列在y轴上具有log2倍数变化的图和在y轴上的平均计数(观察是基因)。这些通常称为MA图。我遇到的问题是将数据转换为正确的格式。我可以通过一个循环来做到这一点,但想知道正确的方法。
此时,我有两个数据框:我的设计矩阵和我的数据矩阵。设计矩阵看起来像这样(称之为ED_df):
SampleID Patient Grade Batch
MD48L_2_B_L1 MD48 G2 Feb15
MD48R_3_B_L1 MD48 G3 Feb15
MD53L_2_B_L1 MD53 G2 Feb15
MD53R_3_B_L1 MD53 G3 Feb15
MD58L_2_B_L1 MD58 G2 Sep15
MD58R_3_B_L1 MD58 G3 Sep15
dim(ED_df)
# [1] 18 6
每一行都是一个独特的样本。每个样本来自患者+等级+批次。在这种情况下,所有患者都围绕等级(G2或G3)配对。总共有3批次。两个患者在批次1和2或批次2和3中复制。
我的数据矩阵看起来像这样(称之为data_df):
Gene MD48L_2_B_L1 MD48R_3_B_L1 MD53L_2_B_L1 MD53R_3_B_L1 MD58L_2_B_L1
1 ENSG00000000003 364.26079 329.28730 531.52188 371.67413 275.745038
2 ENSG00000000005 18.92264 49.89201 42.18428 19.42548 1.948728
3 ENSG00000000419 270.59373 261.65590 284.74386 414.41018 293.283591
4 ENSG00000000457 145.70432 125.28439 122.33440 129.50318 148.103342
dim(data_df)
# [1] 31707 18
每列对应一个独特的样本。
我想要做的是为每个基因在每个患者批次集中获得log2倍数变化(G3 / G2)。另外,我希望得到每个患者批次集的平均值(G3,G2)。
然后我会将其绘制为MA图。
同样,我可以通过嵌套的for循环看到如何痛苦地做到这一点,我想做的是通过某种聚合函数找出如何做到这一点。
答案 0 :(得分:1)
另外两个步骤:传播等级,因此G2和G3最终会出现在不同的列中,然后进行总结。我不确定我是否完全理解你想要的聚合过程,但我已经采取了刺激措施。我包括了gm(几何平均)函数的心理包。在处理比率数据时,这很重要。
library(dplyr)
library(tidyr)
library(psych)
data_df %>%
as.data.frame %>%
gather(sample, measurement, -gene) %>%
left_join(ED_df) %>%
spread(Grade, measurement) %>%
group_by(Patient, Batch) %>%
summarize(G2_geometric_mean = G2 %>% gm,
G3_geometric_mean = G3 %>% gm) %>%
mutate(geometric_mean_ratio = G3_geometric_mean / G2_geometric_mean)