0

これはバイオインフォマティクス関連の質問ですが、それでもプログラミングに関する非常に重要な質問です。以下に示す問題のために bash でいくつかのライナーを作成できなかったので、ここで質問することを考えました。親切に助けてください。

問題: 2 つのファイル (タブ区切り) があります。ファイルAは次のようになります

chr1    17050255    234916798
chr1    36688211    36840408
chr1    153961765   154156955
chr1    154128722   154194653
chr1    154130378   154156872
chr1    207493679   207819735

これはゲノム座標のリストです。

ファイル B には、最初の 3 列にゲノム座標も含まれており、4 列目には名前があります。

chr1    1709155 1709324 MMM3
chr1    1709155 1709324 Sk-20
chr1    1709608 1709727 ZdaA
chr1    1709608 1709727 ZdaA
chr1    1709608 1709727 ZA
chr1    1709629 1709727 E-1
chr1    1709629 1709727 E-1
chr1    1709629 1709727 E-1

ファイルAと重なるファイルBの領域(4列目とともに)を持ち、このように印刷したい

ChrA   StrtA    stpA    ChrB  SrtB  StpB       Name 

ファイル A のリージョンが最初に来て、ファイル B の 4 番目の列の値とともに、ファイル B で重なっているリージョンが続きます。

ありがとうございました

4

3 に答える 3

3

bedtools intersectBedを使用する: http://code.google.com/p/bedtools/wiki/Usage#intersectBed

( http://www.biostars.org/で質問することもできます)

于 2012-11-15T14:35:28.900 に答える
2

このようなことをするためにパンダを見ることを絶対にお勧めします。両方を別々の DataFrame にロードすると、見たい形式でそれらをマージできるはずです。

于 2012-11-15T13:57:41.920 に答える
1

DBD::CSVを使用して、問題を SQL 風の方法で処理できます。

#!/usr/bin/env perl
use strict;
use utf8;
use warnings 'all';

use Data::Printer;
use DBI;

my $dbh = DBI->connect('dbi:CSV:', undef, undef, {
    f_encoding      => 'utf8',
    csv_quote_char  => undef,
    csv_escape_char => undef,
    csv_sep_char    => "\t",
    csv_eol         => "\n",
    csv_quote_space => 0,
    csv_quote_null  => 0,
    csv_tables      => {
        fileA       => { file => 'fileA.tsv' },
        fileB       => { file => 'fileB.tsv' },
    },
    RaiseError      => 1,
    PrintError      => 1,
}) or die "DBI/DBD::CSV error: " . $DBI::errstr;

my $sth = $dbh->prepare(<<SQL_QUERY);
    SELECT *
    FROM fileA
    JOIN fileB ON
        (StrtA <= StpB) OR (StrtB <= StpA)
    WHERE Name IS NOT NULL
SQL_QUERY

$sth->execute;
while (my $row = $sth->fetchrow_arrayref) {
    p $row;
}
$sth->finish;
$dbh->disconnect;

(ただし、重複条件を理解したかどうかはわかりません)

于 2012-11-15T14:47:15.963 に答える