【发布时间】:2017-08-02 05:57:15
【问题描述】:
我有两个data.frames,其坐标为线性区间,对应于 id。每个 id 有几个线性区间。其中一个data.frames 被称为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从它在exon.df的第一个区间的第一个位置开始到它在cds.df的第一个区间之前的一个位置,并包括exon.df之间的所有外显子如果存在的话。类似地,id 的 3'utr 从cds.df 的最后一个间隔之后的一个位置开始到exon.df 的最后一个间隔的最后一个位置,并包括exons.df 中的所有外显子(如果存在)。
如果 id 在cds.df 中的第一个间隔的第一个位置是它在exon.df 中的第一个间隔的第一个位置,并且类似地如果它在@ 中的最后一个间隔的最后一个位置,则 id 也可能没有一个或两个 utr 987654339@ 是它在exon.df 中最后一个区间的最后一个位置。
我正在寻找一种快速的方法来检索这些 5'utr 和 3'utr 间隔给 exon.df 和 cds.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 dataframe intervals intersection