Remplacer les valeurs de NA d'une colonne par 0 dans la base de données R [dupliquer]
j'ai une donnée.cadre avec une colonne ayant des valeurs NA
. Je veux remplacer NA
par 0
ou toute autre valeur. J'ai essayé beaucoup de fils et de méthodes, mais il ne me donne pas 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;
aucun des les méthodes ci-dessus ont remplacé NA
par 0 dans la colonne x
pour les données.cadre a
. Pourquoi?
23
demandé sur
Community
2012-11-01 11:24:38
2 réponses
puisque personne jusqu'à présent ne s'est senti à propos de souligner pourquoi ce que vous essayez ne fonctionne pas:
-
NA == NA
doesn't returnTRUE
, it returnsNA
(car comparer à des valeurs non définies devrait donner un résultat non défini). - vous essayez d'appeler
apply
sur un vecteur atomique. Vous ne pouvez pas utiliserapply
pour boucler les éléments d'une colonne. - votre les indices sont désactivés - vous essayez de donner deux indices dans
a$x
, qui est juste la colonne (un vecteur atomique).
Je réparerais 3. pour arriver à a$x[is.na(a$x)] <- 0
50
répondu
themel
2014-02-24 19:49:34
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 remplacement:
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
8
répondu
A5C1D2H2I1M1N2O1R2T1
2012-11-01 07:40:06