我有一个带有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
使用数据表:
library(data.table)
setDT(mydataframe)[order(start.pos,end.pos),list(summean=sum(meancol)),by=list(sampleID, chrom)]
您不应该将列命名为"mean",因为mean是一个函数,可能会出现混淆。
使用dplyr
包可以轻松做到这一点
output <- input_data %>%
group_by(sample_ID,chrom) %>%
order(start.pos,end.pos) %>%
summarize(Mean = mean(mean))
如果这对您没有帮助,请尝试提供一个可复制的示例。