web-dev-qa-db-fra.com

Comment remplacer tous les NA dans une trame de données en utilisant tidyr :: replace_na?

J'essaie de remplir tous les NA de mes données avec des 0. Est-ce que quelqu'un sait comment faire cela en utilisant replace_na de tidyr? À partir de la documentation, nous pouvons facilement remplacer les NA dans différentes colonnes avec des valeurs différentes. Mais comment les remplacer tous par une valeur? J'ai beaucoup de colonnes ...

En utilisant le jeu de données mtcars comme exemple:

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

Si replace_na n'est pas une exigence obligatoire, le code suivant fonctionnera:

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

Problème de référence: https://stackoverflow.com/a/45574804/8382207

42
Sagar

J'ai trouvé un moyen de le faire fonctionner avec replace_na comme demandé (car il s’agit de l’option la plus rapide via les tests microbenchmark):

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)

Pour appliquer cela à votre cadre de données de travail, veillez à remplacer les 2 instances de mtcars par le nom de votre cadre de données de travail lors de la création de l'objet myList.

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