我有一个数据集,其中包含特定位置(支架)上的段的初始和最终位置,如果存在于同一个支架中,则其中一些段与其他段重叠。
> 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
提前致谢。
答案 0 :(得分:2)
您已指定“个人脚手架”,但您的示例输出有一个重复的脚手架。您是否希望在这些群组中加入JOB_N
和Genome
?
如果是这样,一个data.table
方法是分别为min
和max
找到loc_i
和loc_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