ログイン 概要 よくある質問

NGSのdataやUnixコマンドなどほとんど触ったことがなかった初心者です。 Excel fileで持っているゲノム領域の情報をBEDフォーマットのfileにしたいのですが、やり方がわかりません。アドバイスいただけましたら幸甚です。

今、BEDToolsのcoverageBedのスクリプトを実行しようとしているのですが、read countを知りたい領域のBED fileがうまく出来ないために白紙の結果が得られてしまいます。具体的には、chrom chromStart chromEnd name score strandの順に並んだExcel fileをタブ区切りテキスト(.txt)で保存して名前を.bedに変えて領域のBED fileとして使ってみたのですが、BED fileとして認識されていないようでした。UCSCからとってきた遺伝子領域のBED fileではきちんとcoverageの結果が返ってくるので、.txt fileからBED fileをつくる方法がありそうなのは感じるのですが、どのようにしたらいいかわかりません。 助けて頂けたら幸いです。

ちなみに、以下の内容で領域を設定した場合を例に試しています。

chrVI    0  270148  NC_001138   0   +

よろしくお願いいたします。

touran

質問日 Apr 13 '12 at 12:24

touran's gravatar image

touran
15124

edited May 24 '13 at 00:26

mn3's gravatar image

mn3 ♦♦
5154922


coverageBedを実行する時に-sオプションを付けておりますか?

結果が、白紙になる理由は、下の原因では説明がつかないのですが、 問題の原因は、windows依存の改行コードに由来する可能性があります。

質問文中にあるデータをExcelに貼りつけて、もう1行テストレコードを作り、 "dataFromExcel.bed"という名前で保存して、実行してみました。

以下、windowsマシンのcygwin上でインストールしたBEDtoolsでcoverageBedを実行した結果です。 -aと-bは同じファイルを渡しています。

$ cat data/dataFromExcel.bed
chrVI   0       270148  NC_001138       0       +
chrVI   100     300     test1   0       +
$ sed -n "l" data/dataFromExcel.bed
chrVI\t0\t270148\tNC_001138\t0\t+$
chrVI\t100\t300\ttest1\t0\t+$
$ ./BEDTools-Version-2.14.3/bin/coverageBed.exe -a data/dataFromExcel.bed -b data/dataFromExcel.bed
chrVI   2       270148  270148131.0000000       +
chrVI   200     200     200t1   1.0000000

上記の結果は、coverageBedの本来の挙動からするとおかしな結果です。 上記の結果中のタブ文字(\tに変換)や、windows改行コードに含まれるCR(\rに変換される)などの 特殊文字を表示してみると以下のようになっています。

$ ./BEDTools-Version-2.14.3/bin/coverageBed.exe -a data/dataFromExcel.bed -b data/dataFromExcel.bed | sed -n "l"
chrVI\t0\t270148\tNC_001138\t0\t+\r\t2\t270148\t270148\t1.0000000$
chrVI\t100\t300\ttest1\t0\t+\r\t2\t200\t200\t1.0000000$

特殊文字の変換前の結果では、上記の"\r"のところから右側しか表示されていないことが分かるでしょうか。

windowsのExcelでタブ区切りテキストとしてファイルを保存すると改行コードの中に"\r"という特殊文字が 入ってしまうのですが、これは、BEDtoolsからすると文字として認識されてしまうので、 結果、strandの列が"+\r"であるとみなされてしまうのだと思います。この状態で-sオプションを効かせると、 同じstrandのデータが無いため、結果が0になったりする気がします。(おそらく)

以下のsedコマンド操作で、改行文字を置換かけたあと、同じ操作を実行した所、挙動としてまともな結果が得られました。

$ sed 's/\r//' data/dataFromExcel.bed > data/dataFromExcel.CRrm.bed
$ ./BEDTools-Version-2.14.3/bin/coverageBed.exe -a data/dataFromExcel.CRrm.bed -b data/dataFromExcel.CRrm.bed
chrVI   0       270148  NC_001138       0       +       2       270148  2701481.0000000
chrVI   100     300     test1   0       +       2       200     200     1.0000000
$ ./BEDTools-Version-2.14.3/bin/coverageBed.exe -a data/dataFromExcel.CRrm.bed -b data/dataFromExcel.CRrm.bed | sed -n "l"
chrVI\t0\t270148\tNC_001138\t0\t+\t2\t270148\t270148\t1.0000000$
chrVI\t100\t300\ttest1\t0\t+\t2\t200\t200\t1.0000000$

改行コードの変換のしかたについては、上記のsedをcygwin上で実行する他、

私は、"サクラエディタ"などのエディタで 正規表現置換で"\r"を空文字""に変換するなども良く使います。

この辺の情報も参考になります。 http://oshiete.goo.ne.jp/qa/856844.html 要はCR(キャリッジリターン)を除去できれば良いので選択肢はいろいろあるとは思います。 試してみてはどうでしょう。

回答日 Apr 13 '12 at 13:59

nob_fj's gravatar image

nob_fj ♦
50781628

edited May 24 '13 at 00:27

mn3's gravatar image

mn3 ♦♦
5154922

nob_fj ♦さま 丁寧な回答ありがとうございました。strandの指定はしたりしなかったりしていましたが、結果は同じでしたので、エディタの問題であるというご指摘ごもっともです。 MacOSXのターミナルを使っているのですが、テキストはテキストエディットを使って編集していました。 それがいけなかったみたいです。おっしゃる通り、サクラエディタに似た”mi”というものを使って編集したらbed fileとして認識されて、無事カウントを得ることが出来ました。 大変助かりました。

(Apr 13 '12 at 17:25) touran touran's gravatar image

私も改行コードが問題なのではないかと思います。
Macの場合でしたら簡便な方法として、Excelで保存したテキストファイルを「mi」などのテキストエディタで開いて、
文字コードをCR (Mac) からLF (UNIX) に変更後、上書き保存すると使えるようになると思います。

あ、すれ違いでちょうど解決したところだったようですね(^ ^);

回答日 Apr 13 '12 at 17:29

38brain's gravatar image

38brain
13133

edited Apr 13 '12 at 17:30

具体的な対処法を回答くださいましてありがとうございました。エディタを使うだけでいろいろ便利になることがわかり、個人的には非常にためになりました。

(Apr 13 '12 at 20:15) touran touran's gravatar image
あなたの回答
プレビューをトグルする

この質問をフォローする

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

回答

回答とコメント

タグ:

×47
×1
×1
×1
×1

質問日: Apr 13 '12 at 12:24

閲覧数: 14,598 回

最終更新日: May 24 '13 at 00:27

powered by OSQA