0

私は小さなバイオインフォマティクスの問題を抱えていますが、それは簡単に解決できるはずです。「遺伝子型の位相調整」に関連しています。しかし、私はそれに取り組む方法がわかりません。以下の抜粋では、最初の列は識別子であり、後続の列は「a」または「b」でラベル付けされたバイナリ遺伝子型です。「-」は欠落している値を意味します。

Si_gnF.scaffold10533.53688bp_tag414456 b a a b b a b a a a b a b b a b a a b b a a b b
Si_gnF.scaffold10533.76297bp_tag414484 a b b a a b a b b b a b a a b a b b a - b b a a
Si_gnF.scaffold10533.98416bp_tag414526 a b b a a b a b b b a b a a b a b b a a b b a a
Si_gnF.scaffold10534.48805bp_tag414546 b a a b a b a b b b b b b a a a a b a b b b b a
Si_gnF.scaffold10535.1091787bp_tag414684 a a a b b a a a b a b a a a a b b b a a b b a a
Si_gnF.scaffold10535.1151107bp_tag414765 b b b a a b b b a b a - b b b a a a b b a a b b
Si_gnF.scaffold10535.1220879bp_tag414877 a a a b b a a a b a b a a a a b b b a a b b a a
Si_gnF.scaffold10535.1304464bp_tag414988 b b b a a b b b a b a b b b b a a a b b a a b b
Si_gnF.scaffold10535.1347462bp_tag415047 b b b a a b b b a b a b b b b a a a b b a a b b
Si_gnF.scaffold10535.1379804bp_tag415090 b b b a a b b b a b a b b b b a a a b b a a b b
Si_gnF.scaffold10535.1540335bp_tag415345 a a a b b a a a b a b a a a a b b b a a b b a a
Si_gnF.scaffold10535.1585442bp_tag415410 a a a b b a a a b a b a a a a b b b a a b b a a
Si_gnF.scaffold10535.1609908bp_tag415431 b b b a a b a b a b a b b b b a a a b b a a b b
Si_gnF.scaffold10535.1711158bp_tag415567 b b b a a b b b a b a b b b b a a a b b a a b b
Si_gnF.scaffold10535.1744394bp_tag415609 b b b a a b b b a b a b b b b a a a b b a a b b
Si_gnF.scaffold10535.1751886bp_tag415620 a a a b b a a a b a b a a a a b b b a a b b a a
Si_gnF.scaffold10535.1752774bp_tag415622 a a a b b a a a b a b a a a a b b b a a b b a a
Si_gnF.scaffold10535.1789478bp_tag415675 b b - a a b b b a b a b b b b a a a b b a a b b
Si_gnF.scaffold10535.1800135bp_tag415687 b b b a a b b b a b a b b b b a a a b b a a b b
Si_gnF.scaffold10535.1885424bp_tag415814 a a a b b a a a b a b a a a a b b b a a b b a a

基本的には、線の違いを最小限に抑えたいと思います。(個々の列を編集することはできませんが、行全体のラベルを反転することはできます)。最初の4行の結果は次のようになります。

Si_gnF.scaffold10533.53688bp_tag414456 b a a b b a b a a a b a b b a b a a b b a a b b
Si_gnF.scaffold10533.76297bp_tag414484 b a a b b a b a a a b a b b a b a a b - a a b b  <-- this one flipped
Si_gnF.scaffold10533.98416bp_tag414526 b a a b b a b a a a b a b b a b a a b b a a b b  <-- this one flipped
Si_gnF.scaffold10533.53688bp_tag414456 b a a b b a b a a a b a b b a b a a b b a a b b

最初のステップとして、ペアワイズ比較を行う必要があります。しかし、違いを定量化して、どの行のラベルを反転する必要があるかを知るための良い方法は何ですか?(2つの連続する行が100%に一致することはめったにありません。値が欠落しているだけでなく、複数の(多くの)不一致が存在する可能性があります)。

(理想的にはルビーまたはRで)

4

1 に答える 1

2

レーベンシュタインアルゴリズムを使用して、2つの文字列の違いを定量化できます。それを行う1つの方法:

require 'text' # See http://rubygems.org/gems/text

lines # => a array with each line

def compare(line1, line2)
  Text::Levenshtein.distance(line1.sub(/.*\s/, '').sort,
                             line2.sub(/.*\s/, '').sort)
end

compare(lines[0], lines[1]) # => 1 (one value different)

(「abaa」が「aaab」と等しくない場合はsort、メソッドからを削除します。)

于 2011-03-15T18:32:10.800 に答える