我在R中有一个数据表,我想要计算重叠窗口的数目。这本质上是一个队列命令,似乎是可以使用床头工具完成的,但我不知道如何做到这一点,而不离开R。
是否已经有了R函数来做这件事,或者对什么是有效的方法有任何建议?
如果这有帮助的话,下面是我想做的一个小例子。提前感谢!
投入:
chrom start end
1 1 100
1 50 150返回:
chrom start end count
1 1 49 1
1 50 100 2
1 101 150 1发布于 2020-06-25 22:43:14
您可以使用GenomicRanges,首先我们创建GRanges对象:
library(GenomicRanges)
gr = GRanges(seqnames=c(1,1),IRanges(start=c(1,50),end=c(100,150)))现在计算返回rle对象的覆盖率:
COV = coverage(gr)
class(COV)
[1] "SimpleRleList"
attr(,"package")
[1] "IRanges"它告诉您的是" 1 ",有49次运行1,51次运行2和50次运行1,这或多或少是您所需要的,除非您需要在data.frame表单中。
COV
RleList of length 1
$`1`
integer-Rle of length 150 with 3 runs
Lengths: 49 51 50
Values : 1 2 1为了处理这个问题,我们最好编写一个函数:
COV2bg = function(cov_obj){
allchr = lapply(names(cov_obj),function(i){
ends = cumsum(cov_obj[[i]]@lengths)
GRanges(
seqnames=i,
IRanges(start=c(1,ends[-length(ends)]),end=ends),
value = cov_obj[[i]]@values
)
})
Reduce(c,allchr)
}然后将其应用于rle:
as.data.frame(COV2bg(COV))
seqnames start end width strand value
1 1 1 49 49 * 1
2 1 49 100 52 * 2
3 1 100 150 51 * 1https://stackoverflow.com/questions/62584577
复制相似问题