Remplacer les valeurs de NA d'une colonne par 0 dans la base de données R [dupliquer]

possibilité de duplication:

réglez NA à 0 dans R

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:

  1. NA == NA doesn't return TRUE , it returns NA (car comparer à des valeurs non définies devrait donner un résultat non défini).
  2. vous essayez d'appeler apply sur un vecteur atomique. Vous ne pouvez pas utiliser apply pour boucler les éléments d'une colonne.
  3. 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