私はRでこれを行う方法を知っていますが、残念ながら私のデータセットが大きすぎますので、長いフォーマットから広いフォーマットにデータセットを変換するシェルを使用しようとしています。unix長いと広いに変換する
現在のフォーマットは次のようなものです:私は2番目の列が新しい列になり、3列目はカウントになるように、幅広いフォーマットに変換したい
Name1 A 3
Name2 A 6
Name3 A 10
Name3 B 2
Name4 A 4
Name5 B 1
。何の谷が存在しない場合、私はこのようにその場所に0を挿入する:Linuxの私の限られた知識と私のオンライン検索から
Name A B
Name1 3 0
Name2 6 0
Name3 10 2
Name4 4 0
Name5 0 1
私は本当にこれをアプローチする方法がわかりません。
私がこの問題を回避しようとしたことの1つは、grepを使用してファイルを2つの別々のファイルにサブセット化し、次に長い結合を試みることです。この
grep A file | sort -k 1 > file_A
grep B file | sort -k 1 > file_B
join -o '0,1.2,1.3,2.2,2.3' -e "0" -a1 -a2 <(sort -k 1 file_A) <(sort -k 1 file_B) > output
は、私はちょうどjoinコマンドを実行すると動作するように表示されます。しかし、私は、ファイルへの出力を指示しようとすると、私は次のようなエラーメッセージが表示されます:
私はオンラインで読むファイルが正しくソートされていないときにこのエラーが表示されることを示しているが、私は実際に考えているjoin: /dev/fd/63:63: is not sorted: Name4 A 83
join: /dev/fd/62:15: is not sorted: Name5 B 3
すべて私は列1でそれらを2回並べ替えます。
広い形式から長い形式に移行するための最良の方法や、サマリーテーブルを作成しようとする試みのトラブルシューティング方法については、大変感謝しています。ありがとうございました。
ありがとうございました!私は前にgawkを使用したことはありませんが、このスクリプトは完全に機能します!ジョインを使用することは、わたしが心地よく感じたコマンドを使って創造的に考えることを試みる偶然の試みでしたが、このgawkの解決策ははるかに優れています! – user4670961