R中的常见基因组间隔

use*_*668 3 r overlap overlapping genome

我想推断不同样本之间的共享基因组间隔.

我的意见:

sample    chr start end
NE001      1   100  200
NE001      2   100  200
NE002      1   50   150
NE002      2   50   150
NE003      2   250  300
Run Code Online (Sandbox Code Playgroud)

我的预期产量:

chr start end  freq
1    100  150   2
2    100  150   2
Run Code Online (Sandbox Code Playgroud)

其中"freq"是有多少样本用于推断共享区域.在上面的示例中,freq = 2(NE001和NE002).

干杯!

Mar*_*gan 6

如果您的数据在data.frame中(见下文),使用Bioconductor GenomicRanges包我创建一个GRanges实例,同时保留非范围列

library(GenomicRanges)
gr <- makeGRangesFromDataFrame(df, TRUE)
Run Code Online (Sandbox Code Playgroud)

由数据表示的离散范围由disjoin函数给出,并且不相交的范围('查询')和您的原始('主题')之间的重叠是

d <- disjoin(gr)
olaps <- findOverlaps(d, gr)
Run Code Online (Sandbox Code Playgroud)

将与每个重叠主题相关联的样本信息与相应的查询分开,并将其与不相交的GRanges关联为

mcols(d) <- splitAsList(gr$sample[subjectHits(olaps)], queryHits(olaps))
Run Code Online (Sandbox Code Playgroud)

导致例如

> d[elementLengths(d$value) > 1]
GRanges with 2 ranges and 1 metadata column:
      seqnames     ranges strand |           value
         <Rle>  <IRanges>  <Rle> | <CharacterList>
  [1]        1 [100, 150]      * |     NE001,NE002
  [2]        2 [100, 150]      * |     NE001,NE002
  ---
  seqlengths:
    1  2
   NA NA
Run Code Online (Sandbox Code Playgroud)

以下是我输入数据的方式:

txt <- "sample    chr start end
NE001      1   100  200
NE001      2   100  200
NE002      1   50   150
NE002      2   50   150
NE003      2   250  300"
df <- read.table(textConnection(txt), header=TRUE, stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)