実験や調査によっては様々な原因によって欠損値や外れ値が生じる可能性があります。
今回はこの排除方法について記録したいと思います。
欠損値の排除
欠損値はNA(not available)と表記されることが多いです。
(この表記方法の方が扱いが楽です。)
欠損値が含まれたデータフレームから欠損値を排除する方法として
- na.omit(na.exclude)
- subset()という関数の使用
が挙げられます。
例えば以下のようなデータを用意します。
> test ID data 1 1 0.301 2 2 NA 3 3 0.250 4 4 0.345 5 5 0.222 6 6 0.279 7 7 0.000 8 8 0.211 9 9 0.245 10 10 0.367
na.omitを利用する場合はna.omit(データフレーム名)とし
> test1<-na.omit(test) > test1 ID data 1 1 0.301 3 3 0.250 4 4 0.345 5 5 0.222 6 6 0.279 7 7 0.000 8 8 0.211 9 9 0.245 10 10 0.367
na.excludeの場合も同様に
> test2<-na.exclude(test) > test2 ID data 1 1 0.301 3 3 0.250 4 4 0.345 5 5 0.222 6 6 0.279 7 7 0.000 8 8 0.211 9 9 0.245 10 10 0.367
とNAが含まれる行を排除することができます。
subset()という関数は
格納するデータフレーム名<-subset(テストフレーム名, 指定する条件)
を行うことで指定する条件の行をテストフレームから抽出することができます。
そこでcomplete.cases(データフレーム名)というNAが含まれていない行を抽出する関数を利用することでNAを排除したデータフレームを作成することができます。
> test3<-subset(test, complete.cases(test)) > test3 ID data 1 1 0.301 3 3 0.250 4 4 0.345 5 5 0.222 6 6 0.279 7 7 0.000 8 8 0.211 9 9 0.245 10 10 0.367
このようにして欠損値を排除するデータフレームを作成することができます。
また、多くの関数には欠損値を自動的に排除して計算するna.rmというオプションが有効になっております。
例えば今回使用したデータセットで打率(BA:batting average)の平均をmean()をもちいて算出しようとすると
> mean(test$data) [1] NA
欠損値が含まれているためNAと表記されてしまいます。
そこでna.rmというオプションをTRUEにすると
> mean(test$data,na.rm=T) [1] 0.2466667
と正しく計算することができます。
外れ値の排除
まず、外れ値の例として先ほどの打率が0.000の選手を検索してみたいと思います。
検索には先ほどのsubset()という関数と欠損値を排除したデータフレームを使います。
> test4<-subset(test2,data==0.000) > test4 ID data 7 7 0
このようにIDが7の人の打率が0.000であることがわかります。
そこでIDが7である人のデータを排除するためにsubset()という関数でIDが7以外のデータを抽出することを示す
ID != 7
と条件を指定してあげます。
> test5<-subset(test2,test2$ID!=7) > test5 ID data 1 1 0.301 3 3 0.250 4 4 0.345 5 5 0.222 6 6 0.279 8 8 0.211 9 9 0.245 10 10 0.367
このように外れ値を排除することができます。
おわりに
今回は実験や調査で生じてしまう欠損値や外れ値の排除方法について記録しました。
NAの削除にはna.omit()という関数で一度に削除するのは簡便で良いですね。
コメント