RでNAを削除する
概要
NAはNot Availableの略で、Rプログラミングでは主に「欠損値」を意味します。一般的なプログラミング言語のnullと意味も使用も全く異なることに注意しましょう。教科書に出てくる例は分析に適した形でよく整理されていますが、実際に分析に取り組む場合は必ずしもそうではありません。そのようなデータを扱う際、最も頻繁に遭遇するのがまさに欠損値です。これらの欠損値は、似た傾向を持つデータを模倣するイミテーションや直接削除する方法で処理されます。
もちろん統計学ではいつでもすべての場合に通用する方法はなく、これらの方法自体が研究の対象です。このポストでそんなに壮大なことを全て扱うことはできませんが、Rで欠損値を扱う簡単な方法を紹介します。
ヒント
次はexample526.csv
ファイルを読み込んだ様子です。
何も入力されていないセルが特別な設定をしなくても欠損値NAと表示されていることがわかります。
データの構造を見ると、一見連続型データのようなX1がカテゴリカルに表示されていることがわかります。これはX1に「空ではないが欠損値」という文字列"?“が含まれているためです。
na.strings
この場合は、ファイルを読み込む際にna.strings
オプションを使って、欠損値として扱う文字列ベクトルを指定します。コードで”?“を欠損値に指定すれば、データの構造も正常に表示されることが確認できます。一方、X2
の最下部を見ると、-99のように極端に変わったデータがあります。他の観測値と比較して、目立って異質な数値で、異常値と見るのも難しいですし、欠損値を意味する可能性が高いです。
もちろん、前にしたようにna.strings
で例外を増やして再度読み込む方法もありますが、数が極端に少ない場合や種類が多い場合は不便です。
したがって、上記のように特定の条件を与えて直接NAを上書きする方法を使用できます。-99のような極端に大きな負の値はなかったため、0より小さいすべての値をNAに変更したのです。一見すると間に合わせの修理のようですが、別の見方をすると必要な部分だけを処理する精密な調整です。
このようなささいでたいしたことないテクニックを自由に使いたいときに使えることがスキルです。
is.na
今、is.na()
関数を使って確認すると、最初のデータで少し変だった値がすべてNAに変わっているのがわかります。
ほとんどの場合、これらの欠損値が含まれる観測値は必要がないため、すべて削除するだけです。
これには様々な創造的な方法がありますが、Rは親切にもこれのための関数が基本的に提供されています。
na.omit
ただna.omit()
関数に入れるだけで、一つでもNAが含まれる観測値はすべてきれいに除去されます。6、9、10行目がきれいに消えます。それほど大したヒントでもありませんが、知らなかったり間違って使ってしまうと、実際の分析を始める前に膨大な時間を失ってしまうこともあります。必ず自分のものとし、長く役立つように使用しましょう。
コード
以下は例示コードです。
example526<-read.csv(file = file.choose()); example526
str(example526)
example526<-read.csv(file = file.choose(),na.strings = c("?")); example526
str(example526)
example526[example526<0]<-NA; example526
is.na(example526)
example526
na.omit(example526)