Zoeken…


Invoering

Als we niet weten welke waarde een variabele aanneemt, zeggen we dat de waarde ontbreekt, aangegeven met NA .

Opmerkingen

Ontbrekende waarden worden weergegeven met het symbool NA (niet beschikbaar). Onmogelijke waarden (bijv. Als gevolg van sqrt(-1) ) worden voorgesteld door het symbool NaN (geen getal).

Ontbrekende gegevens onderzoeken

anyNA meldt of er ontbrekende waarden aanwezig zijn; terwijl is.na waarden mist:

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

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

ìs.na retourneert een logische vector die onder rekenkundige bewerkingen wordt gedwongen tot gehele getallen (met FALSE = 0, TRUE = 1). We kunnen dit gebruiken om erachter te komen hoeveel ontbrekende waarden er zijn:

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

In het is.na van deze benadering kunnen we colSums en is.na op een gegevensframe gebruiken om NA's per kolom te tellen:

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

Het naniar-pakket (momenteel op github maar niet CRAN) biedt verdere hulpmiddelen voor het verkennen van ontbrekende waarden.

Gegevens lezen en schrijven met NA-waarden

Bij het lezen van gegevenssets in tabelvorm met de functies read.* , Zoekt R automatisch naar ontbrekende waarden die op "NA" lijken. Ontbrekende waarden worden echter niet altijd weergegeven door NA . Soms geeft een punt ( . ), Een koppelteken ( - ) of een tekenwaarde (bijvoorbeeld: empty ) aan dat een waarde NA . De parameter na.strings van de functie read.* Kan worden gebruikt om R te vertellen welke symbolen / tekens moeten worden behandeld als NA waarden:

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

Het is ook mogelijk om aan te geven dat meer dan één symbool moet worden gelezen als NA :

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

Evenzo kunnen NA 's worden geschreven met aangepaste tekenreeksen met het argument na om write.csv te write.csv . Andere hulpmiddelen voor het lezen en schrijven van tabellen hebben vergelijkbare opties.

Gebruik NA's van verschillende klassen

Het symbool NA staat voor een logical ontbrekende waarde:

class(NA)
#[1] "logical"

Dit is handig, omdat het gemakkelijk kan worden gedwongen tot andere atomaire vectortypen en daarom meestal de enige NA u nodig hebt:

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

Als u een enkele NA waarde van een ander type nodig hebt, gebruik dan NA_character_ , NA_integer_ , NA_real_ of NA_complex_ . Voor ontbrekende waarden van fancy klassen werkt subsetting met NA_integer_ meestal; om bijvoorbeeld een ontbrekende waarde Date te krijgen:

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

WAAR / ONWAAR en / of NA

NA is een logisch type en een logische operator met een NA retourneert NA als de uitkomst dubbelzinnig is. Hieronder wordt NA OR TRUE geëvalueerd als TRUE omdat ten minste één partij TRUE , maar NA OR FALSE geeft NA terug omdat we niet weten of NA TRUE of FALSE zou zijn geweest

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.

Deze eigenschappen zijn handig als u een gegevensset wilt subsetten op basis van enkele kolommen die NA bevatten.

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>

Ontbrekende waarden weglaten of vervangen

Ontbrekende waarden hercoderen

Regelmatig worden ontbrekende gegevens niet als NA gecodeerd in gegevenssets. In SPSS worden ontbrekende waarden bijvoorbeeld vaak voorgesteld door de waarde 99 .

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

Het is mogelijk om NA direct toe te wijzen met behulp van subsetting

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

De voorkeursmethode is echter het gebruik van is.na<- zoals hieronder. Het helpbestand ( ?is.na ) vermeldt:

is.na<- mogelijk een veiligere manier om vermissing in te stellen. Het gedraagt zich bijvoorbeeld anders voor factoren.

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

Beide methoden komen terug

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

Ontbrekende waarden verwijderen

Ontbrekende waarden kunnen op verschillende manieren uit een vector worden verwijderd:

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

Ontbrekende waarden uitsluiten van berekeningen

Wanneer u rekenkundige functies gebruikt op vectoren met ontbrekende waarden, wordt een ontbrekende waarde geretourneerd:

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

De parameter na.rm geeft de functie aan dat de NA waarden van de berekening moeten worden uitgesloten:

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

Sommige R-functies, zoals lm , hebben een parameter na.action . De standaardwaarde hiervoor is na.omit , maar met options(na.action = 'na.exclude') het standaardgedrag van R worden gewijzigd.

Als het niet nodig is om het standaardgedrag te wijzigen, maar voor een specifieke situatie een andere na.action nodig is, moet de parameter na.action worden opgenomen in de functieaanroep, bijvoorbeeld:

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow