堆在床上的锉刀从R内
我在R中有一个数据表,我想计算重叠窗口的数量。这本质上是一个pileup命令,似乎可以使用bedtools完成,但我不知道如何在不离开R的情况下完成 是否已经有一个R函数来实现这一点,或者对什么可能是有效的方法有任何建议 如果有帮助的话,这里有一个我正在尝试做的小例子。提前谢谢 输入:堆在床上的锉刀从R内,r,bioinformatics,R,Bioinformatics,我在R中有一个数据表,我想计算重叠窗口的数量。这本质上是一个pileup命令,似乎可以使用bedtools完成,但我不知道如何在不离开R的情况下完成 是否已经有一个R函数来实现这一点,或者对什么可能是有效的方法有任何建议 如果有帮助的话,这里有一个我正在尝试做的小例子。提前谢谢 输入: chrom start end 1 1 100 1 50 150 返回: chrom start end count
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
您可以使用GRanges,首先我们创建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"
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”,有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对象上:
COV = coverage(gr)
class(COV)
[1] "SimpleRleList"
attr(,"package")
[1] "IRanges"
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
虽然大多数链接答案使用
findOverlaps
或类似的GRanges
上下文,但对我来说,最简单的方法是使用覆盖范围。很容易来回切换,选择最方便或最高效的框架
库(基因组范围)
gr seqnames strand |分数
#> |
#> [1] 1 1-49 * | 1
#> [2] 1 50-100 * | 2
#> [3] 1 101-150 * | 1
#> -------
#>seqinfo:1个来自未指定基因组的序列
#如果您想要一个data.table
DT seqnames开始-结束宽度钢绞线分数
#> 1: 1 1 49 49 * 1
#> 2: 1 50 100 51 * 2
#> 3: 1 101 150 50 * 1
#转换回田庄:
带(DT,格兰杰(序号名称,伊朗(开始,结束),分数=分数))
#>具有3个范围和1个元数据列的GRanges对象:
#>seqnames strand |分数
#> |
#> [1] 1 1-49 * | 1
#> [2] 1 50-100 * | 2
#> [3] 1 101-150 * | 1
#> -------
#>seqinfo:1个来自未指定基因组的序列;没有长度
由(v0.3.0)于2020年6月25日创建。请在此处查看答案:可能重复:相关:,带有nice数据。表
answers.cool。从未意识到您可以将覆盖范围对象转换为GRanges