awk を使用して、行列の各行で文字列が発生した回数を合計します。

awk を使用して、行列の各行で文字列が発生した回数を合計します。

私は、パーセンテージ(0.00 - 100.00、浮動小数点)でまれに埋め込まれる非常に長いデータフレーム(〜1,100万x 130)を持っています。

欠落している項目は、以下のように「NA」と表示されます。

cat1    NA    NA    99.90    NA    NA    10.90    NA
cat2    NA    1.00    NA    19.12    NA    NA    NA  
cat3    NA    NA    NA    NA    NA    NA    45.00

私はこのデータフレームを行ごとに見て、「NA」の発生回数を合計したいと思います。

通常、次の操作を実行してRでこれを簡単に実行できますが、ファイルが大きすぎるapply(data.frame, 1, function(x) sum(is.na(x))ため、メモリの問題が引き続き発生します。可能であれば、AWKを使用してこれを実行して、将来の同様の問題を解決するためにコマンドラインに適用できるようにしたいと思います。

私はawkに精通していませんが、基本的に各レコード/行のフィールドで「NA」の発生回数を合計してファイル行をスキップするためのインデックスとして使用できます。

事前にありがとう

ベストアンサー1

一般的な話す:

$ awk '{ for (i=2;i<=NF;i++) if ($i=="NA") c++; print c; c=0 }' file
5
5
6

おすすめ記事