Duplicata possible:
Réglez NA sur 0 dans R
J'ai un data.frame avec une colonne ayant NA
valeurs. Je veux remplacer NA
par 0
ou toute autre valeur. J'ai essayé beaucoup de threads et de méthodes mais cela ne m'a pas donné le résultat. J'ai essayé les méthodes ci-dessous.
a$x[a$x==NA]<-0;
a[,c("x")]<-apply(a[,c("x")],1,function(z){replace(z, is.na(z), 0)});
a$x[is.na(a$x),]<-0;
Aucune des méthodes ci-dessus n'a remplacé NA
par 0 dans la colonne x
pour data.frame a
. Pourquoi?
Comme personne ne s'est senti à ce jour apte à souligner pourquoi ce que vous essayez ne fonctionne pas
NA == NA
Ne renvoie pas TRUE
, il renvoie NA
(car la comparaison avec des valeurs non définies devrait donner un résultat non défini).apply
sur un vecteur atomique. Vous ne pouvez pas utiliser apply
pour parcourir les éléments d'une colonne.a$x
, Qui est juste la colonne (un vecteur atomique).Je réparerais 3. pour arriver à a$x[is.na(a$x)] <- 0
Tout d'abord, voici quelques exemples de données:
set.seed(1)
dat <- data.frame(one = rnorm(15),
two = sample(LETTERS, 15),
three = rnorm(15),
four = runif(15))
dat <- data.frame(lapply(dat, function(x) { x[sample(15, 5)] <- NA; x }))
head(dat)
# one two three four
# 1 NA M 0.80418951 0.8921983
# 2 0.1836433 O -0.05710677 NA
# 3 -0.8356286 L 0.50360797 0.3899895
# 4 NA E NA NA
# 5 0.3295078 S NA 0.9606180
# 6 -0.8204684 <NA> -1.28459935 0.4346595
Voici notre remplaçant:
dat[["four"]][is.na(dat[["four"]])] <- 0
head(dat)
# one two three four
# 1 NA M 0.80418951 0.8921983
# 2 0.1836433 O -0.05710677 0.0000000
# 3 -0.8356286 L 0.50360797 0.3899895
# 4 NA E NA 0.0000000
# 5 0.3295078 S NA 0.9606180
# 6 -0.8204684 <NA> -1.28459935 0.4346595
Alternativement, vous pouvez bien sûr écrire dat$four[is.na(dat$four)] <- 0