web-dev-qa-db-ja.com

tidyr :: replace_naを使用してデータフレーム内のすべてのNAを置き換える方法は?

データのすべてのNAを0で埋めようとしています。 tidyrのreplace_naを使用してそれを行う方法を知っている人はいますか?ドキュメントから、異なる列のNAを異なる値に簡単に置き換えることができます。しかし、それらをすべて何らかの値で置き換える方法は?列がたくさんあります...

例としてmtcarsデータセットを使用する:

mtcars [sample(1:nrow(mtcars), 4), sample(1:ncol(mtcars), 4)]<- NA
mtcars %>% replace_na( ??? )
21
zesla

Replace_naが必須要件ではない場合、次のコードが機能します。

mtcars %>% replace(is.na(.), 0)

参照の問題: https://stackoverflow.com/a/45574804/8382207

42
Sagar

replace_naを要求どおりに動作させる方法を見つけました(マイクロベンチマークテストでは最速のオプションであるため):

library(tidyr)
library(dplyr)

# First, create a list of all column names and set to 0
myList <- setNames(lapply(vector("list", ncol(mtcars)), function(x) x <- 0), names(mtcars))

# Now use that list in tidyr::replace_na 
mtcars %>% replace_na(myList)

これを作業データフレームに適用するには、mtcarsオブジェクトを作成するときに、myListの2つのインスタンスを作業データフレームに名前を付けたものに置き換えてください。

6
Dave Gruenewald
library(dplyr)
mydata <- mtcars
mydata[sample(1:nrow(mydata), 4), sample(1:ncol(mydata), 4)]<- NA
mydata %>% mutate_each(funs(replace(., is.na(.), 0)))
2
Andy Terra