NA

Puisque nous sommes dans la lecture de données, il est temps de vous parler d’un problème récurrent avec les données : parfois, il en manque.

L’heure est donc venue de faire un rapide point sur NA qui est, nous l'avons déjà dit, l'équivalent du très célèbre #N/A d'Excel.

> x <- rivers[1:5]
> x[3] <- NA
> x
[1] 735 320  NA 392 524

Le problème que ça peut poser c’est que :

> sum(x)
[1] NA

La bonne nouvelle, c’est que :

> sum(x, na.rm = TRUE)
[1] 1971

(Cet argument na.rm est disponible dans un paquet de fonctions.)

La gestion des NA fait partie intégrante de cette calamité qu’est la gestion des données en général. Voici donc quelques petits trucs qui devraient vous être utiles :

Déjà, il peut être utile de les repérer :

> is.na(x)
[1] FALSE FALSE  TRUE FALSE FALSE
> any(is.na(x))
[1] TRUE
> which(is.na(x))
[1] 3

On peut s’en débarrasser assez facilement :

> y <- x[! is.na(x)]
> y
[1] 735 320 392 524

Il y a aussi na.omit qui fait ça…

Et la fonction complete.cases permet de travailler en parallèle sur plusieurs vecteurs ou colonnes de matrices :

> complete.cases(x, 1:5)
[1]  TRUE  TRUE FALSE  TRUE  TRUE

Je signale aussi que NA a un cousin : NaN (pour Nor a Number, voir ici.) :

> 0/0
[1] NaN
> is.nan(0/0)
[1] TRUE

Notez aussi que :

> 1/0
[1] Inf
> is.infinite(1/0)
[1] TRUE
> is.finite(1/0)
[1] FALSE

(Pour information : seuls Chuck Norris et R peuvent diviser par zéro.)

Et puisque nous y sommes, je vous présente aussi l'objet NULL tel que :

> class(NULL)
[1] "NULL"
> is.null(NULL)
[1] TRUE

Qui est le néant dans R.

Aucun commentaire:

Enregistrer un commentaire