Subscribed unsubscribe Subscribe Subscribe

Rで全部NAの列だけ削除する.その他のNAは0に置換する.

いかにデータ分析していなかったかが,Blogの更新でわかる.
手を動かすのを休むと,どんどんめんどくさがりに傾倒していく私.

ウォーミングアップがてら,こんな話.

こんなふうに,全部NAの行と,ところどころNAが入ったセルがあるとする.

dat <- matrix(c(26,70,10,
                28,NA,59,
                96,84,35,
                NA,85,15,
                35,50,7,
                39,NA,61,
                80,81,32,
                51,4,92,
                NA,NA,NA,
                70,16,29,
                22,4,13,
                31,85,56,
                51,86,43,
                NA,NA,NA,
                78,59,7,
                18,34,33,
                32,14,NA,
                7,NA,14,
                95,25,47,
                39,36,63), ncol=3, byrow=T)

こんなdatに対して,NAの入った行を全部削除するならna.omit()すればよろしい.
全部NAの列は削除し,その後でNAを0に置換することを考える.
普通にRのコードを書くと,

dat <- dat[!apply(is.na(dat), 1, all),]
dat[is.na(dat)] <- 0

こんな感じ.dplyrチェーンでやろうとすると,

require(tidyverse)
dat %>%
  filter(rowSums(is.na(.)) != ncol(.)) %>%
  mutate_all(funs(replace(., is.na(.), 0)))

こんな感じ.