首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R内到床文件上的堆积

从R内到床文件上的堆积
EN

Stack Overflow用户
提问于 2020-06-25 21:26:24
回答 1查看 145关注 0票数 2

我在R中有一个数据表,我想要计算重叠窗口的数目。这本质上是一个队列命令,似乎是可以使用床头工具完成的,但我不知道如何做到这一点,而不离开R。

是否已经有了R函数来做这件事,或者对什么是有效的方法有任何建议?

如果这有帮助的话,下面是我想做的一个小例子。提前感谢!

投入:

代码语言:javascript
复制
chrom    start     end
1        1         100
1        50        150

返回:

代码语言:javascript
复制
chrom      start    end    count
1        1          49      1
1        50         100     2
1        101        150     1
EN

回答 1

Stack Overflow用户

发布于 2020-06-25 22:43:14

您可以使用GenomicRanges,首先我们创建GRanges对象:

代码语言:javascript
复制
library(GenomicRanges)
gr = GRanges(seqnames=c(1,1),IRanges(start=c(1,50),end=c(100,150)))

现在计算返回rle对象的覆盖率:

代码语言:javascript
复制
COV = coverage(gr)
class(COV)

[1] "SimpleRleList"
attr(,"package")
[1] "IRanges"

它告诉您的是" 1 ",有49次运行1,51次运行2和50次运行1,这或多或少是您所需要的,除非您需要在data.frame表单中。

代码语言:javascript
复制
COV
RleList of length 1
$`1`
integer-Rle of length 150 with 3 runs
  Lengths: 49 51 50
  Values :  1  2  1

为了处理这个问题,我们最好编写一个函数:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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      *     1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62584577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档