Bonjour,
si tu as un vecteur d'objets numériques , tu peux compter les valeurs différentes de NA de plusieurs façons :
Code : Tout sélectionner
pics <- c(NA, 100, 200, NA)
sum(!is.na(pics), na.rm = TRUE)
length(pics[!is.na(pics)])
Dans la première ligne !is.na permet de demander quelles valeurs ne sont pas égales à NA (avec l'opérateur unaire not "!")
R te renvoi un vecteur de booléens (logicals), vrai ou faux, qui répondent à la question. Tu peux ensuite compter le nombre de TRUE avec la fonction de somme "sum" car les booléens sont convertis en des entiers dans les situations où une valeur numérique est nécessaire, ainsi TRUE est évalué comme 1 et FALSE comme 0 (> TRUE == 1[1] TRUE > FALSE == 0 [1] TRUE ==> ?sum ?logical). On utilise le paramètre na.rm pour ignorer les NA si jamais il y en a dans le vecteur !is.na(pics).
Je te laisse inspecter la 2ème :)
Mais si tu veux juste faire une moyenne tu n'es pas obligé de la calculer manuellement, R possède déjà une fonction qui le fait : mean
Il faut utiliser l'argument na.rm pour que les valeurs NA soient, rm pour removed, enlevées du vecteur pour le calcul. Car comme tu peux le constater les calculs avec des NA produit des NA : ">NA + 1 [1] NA"
Deux choses importantes :
Pour comparer une valeur à NA tu dois obligatoirement utiliser is.na, tu ne peux pas utiliser l'opérateur "==".
et attention "NA" est différent de NA.
Code : Tout sélectionner
> NA == NA
[1] NA
> is.na(NA)
[1] TRUE
> is.na("NA")
[1] FALSE
> pics <- c("NA", 100, 200, "NA")
> sum(!is.na(pics), na.rm = TRUE)
[1] 4
Bon courage