Suche…


Einführung

Wenn wir nicht wissen, welchen Wert eine Variable annimmt, sagen wir, dass ihr Wert fehlt, angegeben durch NA .

Bemerkungen

Fehlende Werte werden durch das Symbol NA (nicht verfügbar) dargestellt. Unmögliche Werte (z. B. durch sqrt(-1) ) werden durch das Symbol NaN (keine Zahl) dargestellt.

Untersuchen der fehlenden Daten

anyNA meldet, ob fehlende Werte vorhanden sind. is.na meldet fehlende Werte elementweise:

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

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

ìs.na gibt einen logischen Vektor zurück, der bei arithmetischen Operationen zu ganzzahligen Werten gezwungen wird (mit FALSE = 0, TRUE = 1). Wir können dies verwenden, um herauszufinden, wie viele Werte fehlen:

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

In Erweiterung dieses Ansatzes können wir colSums und is.na in einem is.na verwenden, um NAs pro Spalte zu zählen:

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

Das Naniar-Paket (derzeit auf Github, aber nicht auf CRAN) bietet weitere Tools zum Ermitteln fehlender Werte.

Lesen und Schreiben von Daten mit NA-Werten

Beim Lesen von Tabellendatensätzen mit der Funktion read.* Sucht R automatisch nach fehlenden Werten, die wie "NA" aussehen. Fehlende Werte werden jedoch nicht immer von NA . Manchmal gibt ein Punkt ( . ), Ein Bindestrich ( - ) oder ein Zeichenwert (zB: empty ) an, dass ein Wert NA . Mit na.strings Parameter na.strings der Funktion read.* Kann R na.strings werden, welche Symbole / Zeichen als NA Werte behandelt werden müssen:

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

Es kann auch angegeben werden, dass mehr als ein Symbol als NA gelesen werden muss:

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

In ähnlicher Weise NA kann s mit maßgeschneiderten Strings geschrieben werden , um die Verwendung von na Argument write.csv . Andere Tools zum Lesen und Schreiben von Tabellen haben ähnliche Optionen.

Verwendung von NAs verschiedener Klassen

Das Symbol NA steht für einen logical fehlenden Wert:

class(NA)
#[1] "logical"

Dies ist praktisch, da es leicht zu anderen Atomvektortypen gezwungen werden kann und daher normalerweise die einzige NA Sie benötigen:

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

Wenn Sie einen einzelnen NA Wert eines anderen Typs benötigen, verwenden Sie NA_character_ , NA_integer_ , NA_real_ oder NA_complex_ . Bei fehlenden Werten von ausgefallenen Klassen funktioniert das Subsetting mit NA_integer_ normalerweise. Zum Beispiel, um ein fehlendes Datum zu erhalten:

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

TRUE / FALSE und / oder NA

NA ist ein logischer Typ und ein logischer Operator mit einer NA gibt NA wenn das Ergebnis mehrdeutig ist. Unten NA OR TRUE ausgewertet TRUE , da mindestens eine Seite wertet TRUE jedoch NA OR FALSE kehrt NA , weil wir nicht wissen , ob NA gewesen wäre TRUE oder 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.

Diese Eigenschaften sind hilfreich, wenn Sie einen Datensatz basierend auf einigen Spalten, die NA enthalten, als Teilmenge festlegen möchten.

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>

Fehlende Werte auslassen oder ersetzen

Fehlende Werte neu codieren

Fehlende Daten werden in Datensätzen regelmäßig nicht als NA codiert. In SPSS zum Beispiel werden fehlende Werte häufig durch den Wert 99 .

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

Es ist möglich, die NA direkt über das Subset zuzuweisen

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

Die bevorzugte Methode ist jedoch die Verwendung von is.na<- wie unten beschrieben. Die Hilfedatei ( ?is.na ) besagt:

is.na<- kann einen sichereren Weg bieten, um den Mangel zu beheben. Es verhält sich beispielsweise für Faktoren anders.

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

Beide Methoden kehren zurück

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

Fehlende Werte entfernen

Fehlende Werte können auf verschiedene Weise aus einem Vektor entfernt werden:

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

Fehlende Werte aus den Berechnungen ausschließen

Wenn arithmetische Funktionen für Vektoren mit fehlenden Werten verwendet werden, wird ein fehlender Wert zurückgegeben:

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

Der Parameter na.rm teilt der Funktion mit, die NA Werte von der Berechnung auszuschließen:

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

Einige R-Funktionen, wie na.action . B. lm , haben einen na.action Parameter. Der Standardwert hierfür ist na.omit , aber mit options(na.action = 'na.exclude') das Standardverhalten von R geändert werden.

Wenn das Standardverhalten nicht geändert werden muss, aber für eine bestimmte Situation eine andere na.action erforderlich ist, muss der na.action Parameter in den Funktionsaufruf aufgenommen werden, z.

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow