从区间数据帧中查找子区间

Finding sub intervals from interval data frames

我有两个data.frame坐标为线性区间,对应ids。每个 id 都有几个线性间隔。 data.frame 之一称为 exon.df:

exon.df <- data.frame(id=c(rep("id1",4),rep("id2",3),rep("id3",5)),
                      start=c(10,20,30,40,100,200,300,1000,2000,3000,4000,5000),
                      end=c(15,25,35,45,150,250,350,1500,2500,3500,4500,5500))

还有另一个cds.df

cds.df <- data.frame(id=c(rep("id1",3),rep("id2",3),rep("id3",3)),
                      start=c(20,30,40,125,200,300,2250,3000,4000),
                      end=c(25,35,45,150,250,325,2500,3500,4250))

它们都有相同的 ID,但 cds.df 的间隔包含在 exon.df 的间隔内。 exons.df 中的间隔是基因的外显子(基因组的一部分被复制并缝合在一起以形成基因的转录本),cds.df 中的间隔是这些外显子中将被翻译的部分到蛋白质,因为基因转录物的外显子也包含不会被翻译的部分(未翻译区域 - utr)。这些 utr 只能位于基因转录本的开始和结束处。开始的utr称为5'utr,最后的utr称为3'utr。 utr 可能根本不存在,也可能跨越基因两端的单个或多个外显子的一部分之间的任何位置。

这意味着一个id的5'utr从id在exon.df第一个区间的第一个位置开始到它在cds.df第一个区间之前的一个位置,并包括所有外显子在 exon.df 之间,如果存在的话。类似地,id 的 3'utr 从其在 cds.df 中最后一个间隔后的一个位置开始到其在 exon.df 中最后一个间隔的最后一个位置,并包括其间 exons.df 中的所有外显子如果存在的话。 如果一个 id 在 cds.df 中的第一个区间的第一个位置是它在 exon.df 中的第一个区间的第一个位置,并且类似地,如果它的最后一个位置cds.df 中的最后一个区间是它在 exon.df.

中最后一个区间的最后位置

我正在寻找一种快速方法来检索这些 5'utr 和 3'utr 间隔给 exon.dfcds.df

这个例子的结果应该是这样的:

utr5.df <- data.frame(id=c("id1","id2","id3","id3"),
                     start=c(10,100,1000,2000),
                     end=c(15,124,1500,2249))

utr3.df <- data.frame(id=c("id2","id3","id3"),
                     start=c(326,4251,5000),
                     end=c(350,4500,5500))

你知道Bioconductor? It's an add-on for R, specifically for the biosciences. It has a package called GenomicRanges吗,你可以用它创建一个包含所有外显子的 GRanges 对象,以及另一个包含所有 CDS 的对象。

然后您可以对这两个对象进行 设置差异 以获得 UTR。检查 "setops-methods" here 部分。您需要 'setdiff' 函数。

因此:将您的 data.frames 转换为 GRanges 对象,然后发出类似 utrs <- setdiff(exons, cds)

的内容