r语言 - 从区间数据框中查找子区间



我有两个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.dfexon.df中最后一个区间的最后一个位置,并且包括介于两者之间的所有外显exons.df子(如果存在的话(。 如果 id 在cds.df中的第一个区间的第一个位置是它在exon.df中的第一个区间的第一个位置,并且类似地,如果它在cds.df中最后一个区间的最后一个位置是它在exon.df中最后一个区间的最后一个位置,则 id 也可能没有一个或两个 utrs。

我正在寻找一种快速的方法来检索这些 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))

你知道生物导体吗?它是R的附加组件,特别是生物科学。它有一个名为GenomicRanges的软件包,您可以使用它创建一个包含所有外显子的GRanges对象,以及另一个包含所有CDS的对象。

然后,您可以对这两个对象进行设置差分以获得 UTR。在此处查看"setops-methods"部分。你想要'setdiff'函数。

所以:将你的 data.frame 转换为 GRanges 对象,然后发出类似utrs <- setdiff(exons, cds)

最新更新