【R】で複数列の欠損値(NA)を0に変換する方法

スポンサーリンク

データ分析において欠損値を0に変換する機会は多いです。

サンプルデータの作成

まずはサンプルを作成してみます。

#サンプル作成
a <- sample(1:10,10)
b <- sample(c(1:8,rep(NA,times=2)),10)
c <- sample(c(1:4,rep(NA,times=6)),10)
df<-data.frame(a,b,c)
df
    a  b  c
1   3 NA NA
2   9  6  3
3   2  2 NA
4   5  3  2
5  10  4  4
6   1  8 NA
7   6  1 NA
8   7  7 NA
9   4 NA NA
10  8  5  1

この中のNAを0に変換します。やり方は2通りです。

  1. 列を指定して変換
  2. データフレーム中のすべてを変換

列を指定して変換

特定の列のみ変換したい場合はこちらが有効です。

df$b[is.na(df$b)]<-0
df$c[is.na(df$c)]<-0
df
    a b c
1   4 7 0
2  10 4 0
3   6 0 0
4   1 6 0
5   5 1 2
6   7 5 1
7   9 0 0
8   8 3 3
9   3 8 0
10  2 2 4

ifelse文も使えますが日付クラスとうは数字に戻ってしまうのでなるべく[]を使いたいところです。

df[is.na(df)]<-0で一発

列が多い時はこちらがパワフルです。

df[is.na(df)]<-0
df
    a b c
1   5 0 0
2   6 3 2
3   3 7 0
4   2 1 0
5  10 8 1
6   7 5 3
7   4 2 0
8   8 0 0
9   9 6 0
10  1 4 4
[]で配列やベクトルに自在にアクセスできるようになると、データ整理が捗ります。

参考

とっとこ駆け出しエンジニアぶろぐ: R データフレーム内のNAを0に変換する

スポンサーリンク
スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です