Compter le nombre de valeurs manquantes

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Fabien Malo
Messages : 51
Enregistré le : 08 Sep 2008, 09:42

Compter le nombre de valeurs manquantes

Messagepar Fabien Malo » 07 Juil 2009, 10:04

Bonjour,
Disposant d'une matrice je souhaiterais compter le nombre de valeurs manquantes de chacune de ces lignes. Auriez-vous une idée pour réaliser cette opération.
Merci pour votre aide

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 07 Juil 2009, 11:56

bonjour,


voici une solution:


Code : Tout sélectionner

> mat1 <- matrix(rnorm(20),4,5)
> mat1[sample(1:20,5)] <- rep(NA,5)
> mat1
           [,1]     [,2]        [,3]       [,4]      [,5]
[1,] -1.0363550 1.401114  0.01107253         NA -1.558154
[2,]  0.2271171       NA -0.16066858  0.2593174        NA
[3,]  2.2526524 1.327531          NA  1.0859151 -0.765653
[4,] -0.3903473 1.363967 -1.22352124 -0.6898865        NA
> apply(mat1,1,function(x) sum(is.na(x)))
[1] 1 2 1 1
>



HTH

pierre
=@===--------¬-------¬------¬-----¬
liens utiles :
http://www.gnurou.org/Writing/SmartQuestionsFr
http://neogrifter.free.fr/welcomeOnInternet.jpg
]<((((*< -------------------------------

François Martin
Messages : 5
Enregistré le : 03 Juil 2009, 12:16

Messagepar François Martin » 07 Juil 2009, 11:59

Il est également possible de transformer chaque ligne en caractère à l'aide de as.character puis de chercher là où as.character()=="?". Et enfin terminer en comptant le tout avec une boucle. Mais effectivement la réponse déjà donnée me semble préférable
"Les statistiques, c'est comme le bikini: ça donne des idées mais ça cache l'essentiel!" Coluche

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 07 Juil 2009, 12:19

bonjour

Il est également possible de transformer chaque ligne en caractère à l'aide de as.character puis de chercher là où as.character()=="?".


ce n'est pas très efficace pour les valeurs égales à NA,
parce que la commande as.character(NA) donnera toujours NA.
De plus, un test logique contre une valeur NA renvoie une valeur NA.

Code : Tout sélectionner

>  as.character(NA)==NA
[1] NA
>
>  as.character(NA)=="NA"
[1] NA
>
>  as.character(NA)=="ted"
[1] NA
>  as.character(NA)!="ted"
[1] NA
>


HTH

pierre
=@===--------¬-------¬------¬-----¬

liens utiles :

http://www.gnurou.org/Writing/SmartQuestionsFr

http://neogrifter.free.fr/welcomeOnInternet.jpg

]<((((*< -------------------------------

François Martin
Messages : 5
Enregistré le : 03 Juil 2009, 12:16

Messagepar François Martin » 07 Juil 2009, 12:47

Bonjour, alors peut être me trompe je de nouveau mais il me semble pourtant l'avoir déjà fait.

1) La base de donnée contient des valeurs manquantes, blancs.
2) On transforme avec as.character et par conséquent on observe des "?" à la place des valeurs manquantes.
3)Ensuite on teste avec =="?" et true apparait là où la valeur manque.

Au delà du fait que cela soit de la bidouille je pense malgré tout que ça fonctionne. Au pire je teste sur un exemple...
Bon après midi
"Les statistiques, c'est comme le bikini: ça donne des idées mais ça cache l'essentiel!" Coluche

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 07 Juil 2009, 12:57

rebonjour,

pour les valeurs blancs et autres, ça peut marcher mais pas pour les 'vraies' valeurs manquantes NA (pour plus de détail voir la documentation).

Au delà du fait que cela soit de la bidouille je pense malgré tout que ça fonctionne. Au pire je teste sur un exemple...


Code : Tout sélectionner

> ?NA
> mat1 <- matrix(rnorm(20),4,5)
> mat1[sample(1:20,5)] <- rep(NA,5)
> mat1
          [,1]       [,2]       [,3]       [,4]        [,5]
[1,] 1.1978356         NA  1.6569545         NA  0.16106968
[2,] 0.6555931         NA -0.7855884  0.5373261 -0.48832422
[3,]        NA  0.4754078         NA  0.2858326 -0.31234142
[4,] 0.6613260 -1.4453528  1.1601089 -1.2339359  0.08847906
> w <- NULL
> for(i in 1:nrow(mat1)){
+   k <- 0
+   for(j in 1:ncol(mat1)){
+     if(as.character(mat1[i,j])=="NA")
+       k <- k+1
+     }
+   w <- c(w,k)
+ }
Erreur dans if (as.character(mat1[i, j]) == "NA") k <- k + 1 :
  valeur manquante là où TRUE / FALSE est requis
> print(w)
NULL
> apply(mat1,1,function(x) sum(is.na(x)))
[1] 2 1 2 0
>




HTH

pierre
=@===--------¬-------¬------¬-----¬

liens utiles :

http://www.gnurou.org/Writing/SmartQuestionsFr

http://neogrifter.free.fr/welcomeOnInternet.jpg

]<((((*< -------------------------------

François Martin
Messages : 5
Enregistré le : 03 Juil 2009, 12:16

Messagepar François Martin » 07 Juil 2009, 13:25

Ok, je sais pas pourquoi j'étais parti dans l'esprit de chercher les blancs. Je ne savais pas que par valeurs manquantes il fallait toujours entendre NA. Bon ben désolé alors...la prochaine fois je me renseignerais un peu mieux avant de répondre :wink:
"Les statistiques, c'est comme le bikini: ça donne des idées mais ça cache l'essentiel!" Coluche


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité