2014-10-28 93 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)] 

你不应该命名列“平均”为平均值是一个函数,并且可以存在混乱。