簡體   English   中英

R dplyr如何總結

[英]R dplyr how to summarize

本質上,我正在嘗試繪制一系列在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循環痛苦地執行此操作,我想做的就是找出如何通過某種聚合函數來執行此操作。

還有兩個步驟:擴展等級,以便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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM