This question already has an answer here:
- How to substitute NA by 0 in 20 columns? 3 answers
I'm trying to fill all NAs in my data with 0's. Does anyone know how to do that using replace_na from tidyr? From documentation, we can easily replace NA's in different columns with different values. But how to replace all of them with some value? I have many columns...
Using mtcars dataset as an example:
mtcars [sample(1:nrow(mtcars), 4), sample(1:ncol(mtcars), 4)]<- NA
mtcars %>% replace_na( ??? )
If replace_na is not a mandatory requirement, following code will work:
mtcars %>% replace(is.na(.), 0)
Reference Issue: https://stackoverflow.com/a/45574804/8382207
I found a way to get it working with replace_na
as requested (as it is the fastest option via microbenchmark testing):
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)
To apply this to your working data frame, be sure to replace the 2 instances of mtcars
with whatever you have named your working data frame when creating the myList
object.
library(dplyr)
mydata <- mtcars
mydata[sample(1:nrow(mydata), 4), sample(1:ncol(mydata), 4)]<- NA
mydata %>% mutate_each(funs(replace(., is.na(.), 0)))
来源:https://stackoverflow.com/questions/45576805/how-to-replace-all-na-in-a-dataframe-using-tidyrreplace-na