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    

2 つのことが必要です。1 つ目は、すべての個々の足場で重複する領域をすべて見つけることです。2 つ目は、各「新しい」セグメントの最初と最後の位置のみを含む新しいテーブルを取得することです。出力は次のようになります。

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_NGenomeそれらのグループにも含めますか?

その場合、1 つの方法は、必要なグループごとにとのと をそれぞれdata.table見つけることです。minmaxloc_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 に答える