我有一个带有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
输出:此处为每个染色体的所有可能的start.pos和end.pos组合添加了每个sampleID的所有平均分数。
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
答案 0 :(得分:1)
使用data.table:
library(data.table)
setDT(mydataframe)[order(start.pos,end.pos),list(summean=sum(meancol)),by=list(sampleID, chrom)]
你不应该将列命名为'mean',因为mean是一个函数,可能会有混淆。
答案 1 :(得分:-1)
您可以使用dplyr
包
output <- input_data %>%
group_by(sample_ID,chrom) %>%
order(start.pos,end.pos) %>%
summarize(Mean = mean(mean))
如果这对您没有帮助,请尝试提供可重现的示例。