Recherche…


Introduction

Lorsque nous ne connaissons pas la valeur d'une variable, nous disons que sa valeur est manquante, indiquée par NA .

Remarques

Les valeurs manquantes sont représentées par le symbole NA (non disponible). Les valeurs impossibles (par exemple, sqrt(-1) ) sont représentées par le symbole NaN (pas un nombre).

Examen des données manquantes

anyNA indique si des valeurs manquantes sont présentes; tandis que is.na signale les valeurs manquantes

vec <- c(1, 2, 3, NA, 5)

anyNA(vec)
# [1] TRUE
is.na(vec)
# [1] FALSE FALSE FALSE  TRUE FALSE

ìs.na renvoie un vecteur logique contraint à des valeurs entières dans les opérations arithmétiques (avec FALSE = 0, TRUE = 1). Nous pouvons l'utiliser pour déterminer le nombre de valeurs manquantes:

sum(is.na(vec))
# [1] 1

En étendant cette approche, nous pouvons utiliser colSums et is.na sur un is.na de données pour compter les NA par colonne:

colSums(is.na(airquality))
#   Ozone Solar.R    Wind    Temp   Month     Day 
#      37       7       0       0       0       0 

Le paquet naniar (actuellement sur github mais pas CRAN) offre d'autres outils pour explorer les valeurs manquantes.

Lecture et écriture de données avec des valeurs NA

Lors de la lecture de jeux de données tabulaires avec les fonctions read.* , R recherche automatiquement les valeurs manquantes qui ressemblent à "NA" . Cependant, les valeurs manquantes ne sont pas toujours représentées par NA . Parfois, un point ( . ), Un tiret ( - ) ou une valeur de caractère (par exemple: empty ) indique qu'une valeur est NA . Le paramètre na.strings de la fonction read.* Peut être utilisé pour indiquer à R quels symboles / caractères doivent être traités comme des valeurs NA :

read.csv("name_of_csv_file.csv", na.strings = "-")

Il est également possible d'indiquer que plus d'un symbole doit être lu comme NA :

read.csv('missing.csv', na.strings = c('.','-'))

De même, les NA peuvent être écrites avec des chaînes personnalisées en utilisant l'argument na pour write.csv . D'autres outils pour lire et écrire des tables ont des options similaires.

Utiliser des NA de différentes classes

Le symbole NA correspond à une valeur logical manquante:

class(NA)
#[1] "logical"

Ceci est pratique, car il peut facilement être contraint à d'autres types de vecteurs atomiques, et est donc généralement la seule NA vous aurez besoin:

x <- c(1, NA, 1)
class(x[2])
#[1] "numeric"

Si vous avez besoin d'une seule valeur NA d'un autre type, utilisez NA_character_ , NA_integer_ , NA_real_ ou NA_complex_ . Pour les valeurs manquantes des classes fantaisies, la mise à NA_integer_ avec NA_integer_ fonctionne généralement; Par exemple, pour obtenir une valeur manquante Date:

class(Sys.Date()[NA_integer_])
# [1] "Date"

VRAI / FAUX et / ou NA

NA est un type logique et un opérateur logique avec une NA renvoie NA si le résultat est ambigu. En dessous, NA OR TRUE évalué à TRUE car au moins une des parties est évaluée à TRUE , cependant NA OR FALSE renvoie NA car nous ne savons pas si NA aurait été TRUE ou FALSE

NA | TRUE
# [1] TRUE  
# TRUE | TRUE is TRUE and FALSE | TRUE is also TRUE.

NA | FALSE
# [1] NA  
# TRUE | FALSE is TRUE but FALSE | FALSE is FALSE.

NA & TRUE
# [1] NA  
# TRUE & TRUE is TRUE but FALSE & TRUE is FALSE.

NA & FALSE
# [1] FALSE
# TRUE & FALSE is FALSE and FALSE & FALSE is also FALSE.

Ces propriétés sont utiles si vous souhaitez sous-définir un ensemble de données basé sur certaines colonnes contenant NA .

df <- data.frame(v1=0:9, 
                 v2=c(rep(1:2, each=4), NA, NA), 
                 v3=c(NA, letters[2:10]))

df[df$v2 == 1 & !is.na(df$v2), ]
#  v1 v2   v3
#1  0  1 <NA>
#2  1  1    b
#3  2  1    c
#4  3  1    d

df[df$v2 == 1, ]
     v1 v2   v3
#1     0  1 <NA>
#2     1  1    b
#3     2  1    c
#4     3  1    d
#NA   NA NA <NA>
#NA.1 NA NA <NA>

Omettre ou remplacer les valeurs manquantes

Recodage des valeurs manquantes

Régulièrement, les données manquantes ne sont pas codées comme NA dans les jeux de données. Dans SPSS par exemple, les valeurs manquantes sont souvent représentées par la valeur 99 .

num.vec <- c(1, 2, 3, 99, 5)
num.vec
## [1]  1  2  3 99  5

Il est possible d'attribuer directement NA en utilisant un sous-ensemble

num.vec[num.vec == 99] <- NA

Cependant, la méthode préférée consiste à utiliser is.na<- comme ci-dessous. Le fichier d'aide ( ?is.na ) indique:

is.na<- peut fournir un moyen plus sûr de définir les éléments manquants. Il se comporte différemment pour les facteurs, par exemple.

is.na(num.vec) <- num.vec == 99

Les deux méthodes retournent

num.vec
## [1]  1  2  3 NA  5

Supprimer les valeurs manquantes

Les valeurs manquantes peuvent être supprimées de plusieurs manières à partir d'un vecteur:

num.vec[!is.na(num.vec)]
num.vec[complete.cases(num.vec)]
na.omit(num.vec)
## [1] 1 2 3 5

Exclure les valeurs manquantes des calculs

Lorsque vous utilisez des fonctions arithmétiques sur des vecteurs avec des valeurs manquantes, une valeur manquante sera renvoyée:

mean(num.vec) # returns: [1] NA

Le paramètre na.rm indique à la fonction d'exclure les valeurs NA du calcul:

mean(num.vec, na.rm = TRUE) # returns: [1] 2.75

# an alternative to using 'na.rm = TRUE':
mean(num.vec[!is.na(num.vec)]) # returns: [1] 2.75

Certaines fonctions R, comme lm , ont un paramètre na.action . La valeur par défaut pour cela est na.omit , mais avec les options(na.action = 'na.exclude') le comportement par défaut de R peut être modifié.

S'il n'est pas nécessaire de modifier le comportement par défaut, mais pour une situation spécifique, une autre na.action est nécessaire, le paramètre na.action doit être inclus dans l'appel de fonction, par exemple:

 lm(y2 ~ y1, data = anscombe, na.action = 'na.exclude')


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow