2014-10-28 81 views
1

我有一個數據框與sampleID,染色體,開始和停止,和平均分數。我希望將每個chrom中每個sampleID的平均分與所有sampleID中start.pos和end.pos的所有可能組合結合起來。因此,要合併每個染色體的所有可能的start.pos和end.pos,併爲每個組合的所有sampleID添加$ mean分數。分割數據幀兩次,並根據列合併

輸入:

 sampleID  chrom start.pos end.pos meancol 
1.1 0012102_A01  1   0 11194349 1 
1.4 0012102_A01  1 11194349 11492125 0 
1.5 0012102_A01  1 11492125 71442329 1 
1.9 0012102_A01  1 71442329 249250621 1 
1.13 0012102_A02  1   0 65493011 1 
1.92 0012102_A02  1 65493011 66164733 1 
1.102 0012102_A02  1 66164733 121347754 1 
1.52 0012102_A02  1 121347754 249250621 0 
1.14 0012102_A03  1   0 56384956 1 
1.83 0012102_A03  1 56384956 106266297 1 
1.73 0012102_A03  1 106266297 249250621 0 
1.15 0012102_A04  1   0 51484139 1 
1.27 0012102_A04  1 51484139 249250621 0 
2.1 0012102_A01  2   0 50000001 1 
2.2 0012102_A01  2 50000001 250000001 1 
2.3 0012102_A02  2   0 50000001 0 
2.7 0012102_A02  2 50000020 270000001 0 
2.18 0012102_A03  2   0 50000004 0 
2.19 0012102_A03  2 50000004 250000001 0 
1.15 0012102_A04  2   0 51484139 0 
1.27 0012102_A04  2 51484139 249250621 0 

輸出:這裏每個sampleID所有平均分數已經被添加爲所有可能的start.pos和end.pos組合對於每個染色體。

chrom start.pos end.pos meancol 
1   0 11194349 4 
1 11194349 11492125 3 
1 11492125 51484139 4 
1 51484139 56384956 3 
1 56384956 65493011 3 
1 65493011 66164733 1 
1 66164733 71442329 3 
1 71442329 106266297 2 
1 106266297 121347754 1 
1 121347754 249250621 1 
2   0 50000001 1 
2 50000001 50000004 0 
2 50000004 50000020 0 
2 50000004 51484139 0 
2 51484139 249250621 0 
2 249250621 250000001 0 
+3

您的輸入與您的輸出有關嗎? – 2014-10-28 11:04:51

+2

我想你需要進一步解釋你如何得到你的輸出「​​mean」,以及如何選擇你的輸出'stat.pos'和'end.pos'來獲得更好的答案。 – 2014-10-28 11:12:45

+0

我編輯過它,希望能有更好的解釋。我基本上崩潰數據幀,從第一行開始 - 0和停止 - 11194349輸入顯示1,在輸出它顯示4該地區,因爲有4個樣本得分爲1。 – user3324491 2014-11-04 16:17:28

回答

-1

您可以dplyr

output <- input_data %>% 
      group_by(sample_ID,chrom) %>% 
      order(start.pos,end.pos) %>% 
      summarize(Mean = mean(mean)) 

如果這沒有幫助你嘗試提供一個重複的例子,這樣做很容易。

1

使用data.table:

library(data.table) 
setDT(mydataframe)[order(start.pos,end.pos),list(summean=sum(meancol)),by=list(sampleID, chrom)] 

你不應該命名列「平均」爲平均值是一個函數,並且可以存在混亂。