J'ai un cadre de données avec quelques colonnes numériques. Certaines lignes ont une valeur de 0 qui doit être considérée comme nulle dans l'analyse statistique. Quel est le moyen le plus rapide de remplacer toutes les valeurs 0 par NULL dans R ?
Réponses
Trop de publicités?Remplacer tous les zéros par NA :
df[df == 0] <- NA
Explication
1. Ce n'est pas NULL
ce par quoi vous voulez remplacer les zéros. Comme il est dit dans ?'NULL'
,
NULL représente l'objet nul dans R
qui est unique et, je suppose, peut être considéré comme l'objet le moins informatif et le plus vide. 1 Il n'est donc pas si surprenant que
data.frame(x = c(1, NULL, 2))
# x
# 1 1
# 2 2
C'est-à-dire que R ne réserve aucun espace pour cet objet nul. 2 Pendant ce temps, en regardant ?'NA'
nous voyons que
NA est une constante logique de longueur 1 qui contient une valeur manquante manquante. NA peut être converti en tout autre type de vecteur, à l'exception de raw.
C'est important, NA
est de longueur 1 afin que R lui réserve un espace. Par exemple,
data.frame(x = c(1, NA, 2))
# x
# 1 1
# 2 NA
# 3 2
De plus, la structure du cadre de données exige que toutes les colonnes aient le même nombre d'éléments afin qu'il n'y ait pas de "trous" (c'est-à-dire, NULL
).
Maintenant, vous pouvez remplacer les zéros par NULL
dans un cadre de données au sens où l'on supprime complètement toutes les lignes contenant au moins un zéro. Lors de l'utilisation, par exemple, de var
, cov
ou cor
ce qui équivaut en fait à remplacer d'abord les zéros par NA
et en fixant la valeur de use
comme "complete.obs"
. Toutefois, cette méthode n'est généralement pas satisfaisante car elle entraîne une perte d'information supplémentaire.
2. Au lieu de faire tourner une sorte de boucle, dans la solution, j'utilise df == 0
vectorisation. df == 0
renvoie (essayez-le) une matrice de la même taille que df
avec les entrées TRUE
et FALSE
. De plus, nous sommes également autorisés à passer cette matrice au sous-ensemble [...]
(ver ?'['
). Enfin, si le résultat de df[df == 0]
est parfaitement intuitif, il peut sembler étrange que df[df == 0] <- NA
donne l'effet désiré. L'opérateur d'affectation <-
n'est en effet pas toujours aussi intelligent et ne fonctionne pas de cette manière avec certains autres objets, mais il le fait avec les trames de données ; cf. ?'<-'
.
<sup>1 </sup>L'ensemble vide dans la théorie des ensembles est en quelque sorte lié.
<sup>2 </sup>Autre similitude avec la théorie des ensembles : l'ensemble vide est un sous-ensemble de tout ensemble, mais nous ne lui réservons aucun espace.
- Réponses précédentes
- Plus de réponses