R:使用R找到重叠区域

时间:2016-02-27 00:13:20

标签: r genetics

我有一个数据集,其中包含特定位置(支架)上的段的初始和最终位置,如果存在于同一个支架中,则其中一些段与其他段重叠。

> head(jobs)
JOB_N      Genome     Scaffold loc_i loc_f
     1 PRJNA179522 Contig10285  1251  1502
     1 PRJNA179522 Contig10285  1251  1602
     2 PRJNA179522 Contig10285  1255  1499
     2 PRJNA179522 Contig10285   828  1076
     2 PRJNA179522 Contig783     245  1487
     2 PRJNA179522 Contig783     822  1073    

我想要两件事:第一件事是找到所有个别支架中的所有重叠区域。 第二种是获得一个只包含每个“新”段的第一个和最后一个位置的新表。输出将是:

JOB_N      Genome     Scaffold loc_i loc_f
     1 PRJNA179522 Contig10285  1251  1602
     2 PRJNA179522 Contig10285   828  1076
     2 PRJNA179522 Contig783     245  1487

提前致谢。

1 个答案:

答案 0 :(得分:2)

您已指定“个人脚手架”,但您的示例输出有一个重复的脚手架。您是否希望在这些群组中加入JOB_NGenome

如果是这样,一个data.table方法是分别为minmax找到loc_iloc_f每个必需的组< / em>的

library(data.table)

dt <- as.data.table(jobs)

dt[, .(min_loc_i = min(loc_i), max_loc_f = max(loc_f)), by=.(JOB_N, Genome, Scaffold)]

#   JOB_N      Genome    Scaffold min_loc_i max_loc_f
#1:     1 PRJNA179522 Contig10285      1251      1602
#2:     2 PRJNA179521 Contig10285      1251      1499
#3:     2 PRJNA179522 Contig10285       828      1076
#4:     2 PRJNA179522   Contig783       245      1487

如果您只想要个人支架,则只需按scaffold

分组
dt[, .(min_loc_i = min(loc_i), max_loc_f = max(loc_f)), by=.(Scaffold)]
#      Scaffold min_loc_i max_loc_f
#1: Contig10285       828      1602
#2:   Contig783       245      1487