【发布时间】:2010-10-12 15:18:18
【问题描述】:
我有两个 data.frame,每个包含三列:chrom、start 和 stop,我们称它们为 rangeA 和 rangeB。对于rangeA 的每一行,我正在寻找rangeB 中的哪一行(如果有)完全包含rangeA 行——我的意思是rangesAChrom == rangesBChrom, rangesAStart >= rangesBStart and rangesAStop <= rangesBStop。
现在我正在做以下事情,我只是不太喜欢。请注意,由于其他原因,我正在遍历 rangeA 的行,但这些原因都不是什么大问题,考虑到这个特定的解决方案,它最终只会使事情更具可读性。
范围A:
chrom start stop
5 100 105
1 200 250
9 275 300
范围B:
chrom start stop
1 200 265
5 99 106
9 275 290
对于 rangeA 中的每一行:
matches <- which((rangesB[,'chrom'] == rangesA[row,'chrom']) &&
(rangesB[,'start'] <= rangesA[row, 'start']) &&
(rangesB[,'stop'] >= rangesA[row, 'stop']))
我认为必须有一种更好的(更好,我的意思是在 rangeA 和 rangeB 的大型实例上更快)的方法来执行此操作,而不是循环遍历此构造。有什么想法吗?
【问题讨论】:
标签: r bioinformatics