LoginSignup
3
1

More than 5 years have passed since last update.

複数のBEDGRAPHファイルをまとめたい

Last updated at Posted at 2017-06-14

やりたいこと

BEDGRAPHという形式のファイルを1つにまとめる必要があって、
bedtools unionbedg を走らせたものの、エラー連発。
エラーメッセージは下記のサイトの通り。

bedtools: unionBedGraphs.cpp:99: CHRPOS UnionBedGraphs::ConsumeNextCoordinate(): Assertion `!queue.empty()' failed.

どういうエラーなのかさっぱり理解できませんが、
質問に対する回答の文章を読むと、どうやらソートできていないとエラーになる様子。

BEDGRAPHファイルのソート

自分のファイルがソートされたファイルであるかを確認します。
チェックは回答のコマンドをそのまま走らせる。

sort -c -k 1,1 -k 2,2n a.bedg

-cはソート済みであるかの結果だけを返すオプションで、ソートは実行されません。
順序が不規則と出ました。なんでだろう…
とりあえず、ソートすれば解消できそうです。
実行するにあたり、上のコマンドをちょっと改変して、すでに存在する.bedgファイルを上書きしたいです。

sort -V -k 1,1 -k 2,2n -u a.bedg -o a.bedg

としてやれば良さげ。link参照
無事に並べ替えられたので、振り出しに戻ってunionbedgを実行します。
念のため、sort -cして確認。今度は大丈夫。

複数のBEDGRAPHファイルを1つのファイルにする

いよいよファイルを統合します。
使用するサブコマンドunionbedgの説明はこちら。

bedtools unionbedg -header -names -filler NA -i a.bedg b.bedg

-fillerは値が存在しない時に代入する文字を指定できます。
出力結果にヘッダーを入れたい時は-header
列ごとの名前を別途入れたい場合は-namesというオプションもありますので、適宜選択ください。

余談その1

bedtoolsにもsortするためのサブコマンドはありますから、好みで使われるのがいいと思います。
sortBedの説明はこちら。
ページの下部まで進むと、こんな記載があります。

Disclaimer: it should be noted that sortBed is merely a convenience utility, as the UNIX sort utility will sort BED files more quickly while using less memory.

シェルコマンドの方がよさげですね。。

余談その2

まとめたいBEDGRAPHファイルにヘッダーが入っていると、ソートされていないとみなされてエラーになりました。
また、入力するBEDGRAPHファイル1つにつき1つの-namesしか対応しませんので、
一旦まとめたBEDGRAPHファイルをさらに統合する時は別の方法をとる必要がありそうです。
このパターンが多いと、bedtoolsは不向きかもしれません。。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1