1

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

> 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

提前致谢。

4

1 回答 1

2

您已指定“个人脚手架”,但您的示例输出具有重复的脚手架。您是否也想将JOB_N和包括Genome在这些组中?

如果是这样,一种方法data.table是分别为每个所需min找到和maxloc_iloc_f

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
于 2016-02-27T00:23:07.827 回答