次のようなデータファイルがあります。
FBpp0070000 acyr193594273 acyr 866
FBpp0070000 acyr193577824 acyr 536
FBpp0070000 acyr193693009 acyr 445
FBpp0070000 bomb193605819 bomb 503
FBpp0070000 bomb193676398 bomb 101
FBpp0070001 acyr193618043 acyr 316
FBpp0070001 acyr193617997 acyr 313
FBpp0070001 bomb193638865 bomb 482
FBpp0070001 locu193695159 locu 220
FBpp0070001 locu193638863 locu 220
データファイルの長さは約45,000行です。
私の目標はこれを持つことです:
FBpp0070000 acyr193594273 acyr 866
FBpp0070000 bomb193605819 bomb 503
FBpp0070001 acyr193618043 acyr 316
FBpp0070001 bomb193638865 bomb 482
FBpp0070001 locu193695159 locu 220
つまり、列3の異なる値ごとに、列1の値ごとに、列4のスコアが最も高い行のみを保持します。
さらに、私が見ている問題は、1)列1の複数の重複する「キー」、および2)列4の等しい「スコア」です。その重複した「スコア」のインスタンスを1つだけ保持したいと思います。
私は過去に、複数の重複キーを処理できるハッシュをperlで作成しました。
これが私がこれまでルビーに持っていたものです。
hash = Hash.new{|h,k| h[k]=Hash.new(&h.default_proc) }
title = ''
File.open('test1.txt', 'r').each do |line|
line.chomp!
query, hit, taxa, score = line.split(/\s/)
hash[query][hit][taxa] = score
# end
#p "#{query}: #{taxa}: #{score}"
end
p hash
ですから、誰かが私が1)本当にこれを正しく行っているかどうか、2)もしそうなら、必要な行を抽出する方法を決定するのを手伝ってくれることを願っています。
ありがとう。