丸の内のデータサイエンティスト

データ分析事例、プログラミング、MBA、各種情報のまとめ等、自身の気になることを淡々と書くblogにしたいです。

【Rプログラミングの小技】NAを含むデータで行方向に数える(apply関数の応用)

 Apply関数でNAを含むデータのデータ数を行方向に数えます

例えば、以下のようなデータセットがあったとします。

col1 col2 col3 col4 col5 col6 col7 col8
14 15 14 16 15 17 17 NA
17 16 17 16 15 18 19 15
18 19 20 19 17 17 NA NA
20 21 19 20 19 22 20 NA
19 20 19 17 17 17 18 NA

1列目はNAがひとつ、2列目はNAなし、...のようにNAを含むデータセットがあるとします。
このとき、このデータセットをRで作ると

dat <- matrix(c(14,15,14,16,15,17,17,NA,
                17,16,17,16,15,18,19,15,
                18,19,20,19,17,17,NA,NA,
                20,21,19,20,19,22,20,NA,
                19,20,19,17,17,17,18,NA)
              ,nrow=5,byrow=T)


となります。行方向のデータの数を知りたければ、通常はAPPLY関数とlengthを使って以下のようにします。

> apply(dat,1,length)
[1] 8 8 8 8 8

これは、NAも数えてしまっているので、NAを数えないように真偽値に変換して、TRUE(=1)を合計(SUM)することで、カウントします。

> apply(!is.na(dat),1,sum)
[1] 7 8 6 7 7

上記で使っているように、関数がlengthではなければ、NAを無視するというオプションna.rm = TRUEというのがあります。

> apply(dat,1,var,na.rm = TRUE)
[1] 1.619048 1.982143 1.466667 1.142857 1.476190