データフレームから欠損値や外れ値を含む行を排除する方法【R備忘録】

実験や調査によっては様々な原因によって欠損値や外れ値が生じる可能性があります。

今回はこの排除方法について記録したいと思います。

スポンサーリンク

欠損値の排除

欠損値は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()という関数で一度に削除するのは簡便で良いですね。

コメント

タイトルとURLをコピーしました