R dplyr如何总结

时间:2015-10-06 00:22:20

标签: r aggregate

基本上,我试图制作一系列在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循环看到如何痛苦地做到这一点,我想做的是通过某种聚合函数找出如何做到这一点。

1 个答案:

答案 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)