3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rでdata.table中のNAを0に変換する

Posted at

はじめに

題名がすべてですが、data.tableの中にあるNAをすべて0にしたいと思ったのですが、変なところにハマったので、備忘録代わりに書きます。

data.frameなら一発?

{dplyr}のパイプの中でNAを0に置換するの中で、data.frame中に含まれるNAを一括で0にするには、下記のコードで一発だそうです。

NAの一括変換
df[is.na(df)] <- 0

ところが、data.tableに適用するとエラーが出てしまいます。

data.tableの失敗例
dt[is.na(dt)] <- 0
 エラー: Must use a vector in `[`, not an object of class matrix.

どうやら、is.na(dt)が配列として解釈されるのがだめっぽい。なぜだろう。意味がないと思いつつ、dt[,is.na(dt)] としてもdt[is.na(dt),] としてもだめだった。

dplyrを使った変換

先程ご紹介した記事だと、dplyrを使った例も提示されている。

dplyrを使った例
dt %>%
  mutate_all(funs(ifelse(is.na(.),0,.)))

これで行けるのだが、最新バージョンだとfuns()はdeprecatedだよ、と怒られるようになったので、ラムダ式を使った方法にするとよい。

ラムダ式を使った例
dt %>%
  mutate_all(~ifelse(is.na(.),0,.))

なんかもっと方法がある気もするが、この方法だと、記事中にあるようにmutate_atとかも使えて応用が効くので知っていて損はない。

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?