[英]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.