Suchen Sie mit einem booleschen Operator in R nach fehlenden Werten
- Fehler beim Prüfen auf vorhandene Werte und fehlende Werte in R
-
Verwenden Sie die Funktion
is.na()
, um nach fehlenden Werten in R zu suchen - Abschluss
Bei der Analyse von Daten importieren wir möglicherweise Daten aus einer externen Quelle, z. B. einer CSV-Datei. Die Daten können fehlende Werte enthalten, die mit NA
gekennzeichnet sind.
Wenn wir nach unterschiedlichen Werten in unseren Daten suchen müssen oder wenn wir nach NA
suchen müssen, müssen wir zuerst die fehlenden Werte ansprechen, um Fehler zu vermeiden. Wir werden in diesem Artikel sehen, wie das geht.
Wir werden einen einfachen Vektor erstellen, um das Problem und die Lösung zu demonstrieren.
Beispielcode:
myVec = c(50, 60, NA, 40, 80)
Fehler beim Prüfen auf vorhandene Werte und fehlende Werte in R
Lassen Sie uns zuerst nach dem Wert 60
suchen, von dem wir wissen, dass er im Vektor vorhanden ist.
Danach werden wir nach einem fehlenden Wert suchen. Beide geben den gleichen Fehler.
Beispielcode:
# Value 60 exists.
for(i in 1:length(myVec))
if(myVec[i] == 60) {print("Present")}
# A missing value, NA, exists.
for(i in 1:length(myVec))
if(myVec[i] == NA) {print("Missing")}
Ausgang:
> # Value 60 exists.
> for(i in 1:length(myVec))
+ if(myVec[i] == 60) {print("Present")}
[1] "Present"
Error in if (myVec[i] == 60) { : missing value where TRUE/FALSE needed
> # A missing value, NA, exists.
> for(i in 1:length(myVec))
+ if(myVec[i] == NA) {print("Missing")}
Error in if (myVec[i] == NA) { : missing value where TRUE/FALSE needed
Wir haben diesen Fehler erhalten, weil die boolesche Bedingung, die wir in die if
-Anweisung eingegeben haben, entweder einen Wert mit NA
oder NA
mit NA
vergleicht. Solche booleschen Bedingungen werten NA
statt TRUE
oder FALSE
aus.
Beispielcode:
# This evaluates to NA rather than TRUE.
NA == NA
# This evaluates to NA rather than FALSE.
NA != NA
# Therefore, the following code raises the error:
# "missing value where TRUE/FALSE needed".
if(NA) print("Correct")
Ausgang:
> # This evaluates to NA rather than TRUE.
> NA == NA
[1] NA
>
> # This evaluates to NA rather than FALSE.
> NA != NA
[1] NA
>
> # Therefore, the following code raises the error:
> # "missing value where TRUE/FALSE needed".
> if(NA) print("Correct")
Error in if (NA) print("Correct") : missing value where TRUE/FALSE needed
Verwenden Sie die Funktion is.na()
, um nach fehlenden Werten in R zu suchen
Um das durch fehlende Werte verursachte Problem zu umgehen, müssen wir fehlende Werte mit der Funktion is.na()
identifizieren. Sie können mit einer Folge von if
- und else
-Bedingungen oder verschachtelten if
- und else
-Bedingungen behandelt werden.
Die Grundvoraussetzung ist unten.
- Die
NA
-Werte müssen getrennt von allen anderen Werten abgeglichen werden. - Bei der Suche nach anderen Werten müssen wir
NA
-Werte ausdrücklich ausschließen.
Beispielcode:
# Using a sequence of if and else conditions.
for(i in 1:length(myVec)){
if(!is.na(myVec[i]) & myVec[i] == 60){
print("Match found")} else
if(!is.na(myVec[i]) & myVec[i] != 60){
print("Match not found")} else
if(is.na(myVec[i])) {
print("Found NA")}
}
# Using a nested if.
for(i in 1:length(myVec)){
if(!is.na(myVec[i])){
if(myVec[i]==60){
print("Match Found")} else {
print("Match not found")}
} else {
print("Found NA")}
}
Ausgang:
> # Using a sequence of if and else conditions.
> for(i in 1:length(myVec)){
+ if(!is.na(myVec[i]) & myVec[i] == 60){
+ print("Match found")} else
+ if(!is.na(myVec[i]) & myVec[i] != 60){
+ print("Match not found")} else
+ if(is.na(myVec[i])) {
+ print("Found NA")}
+ }
[1] "Match not found"
[1] "Match found"
[1] "Found NA"
[1] "Match not found"
[1] "Match not found"
>
> # Using a nested if.
> for(i in 1:length(myVec)){
+ if(!is.na(myVec[i])){
+ if(myVec[i]==60){
+ print("Match Found")} else {
+ print("Match not found")}
+ } else {
+ print("Found NA")}
+ }
[1] "Match not found"
[1] "Match Found"
[1] "Found NA"
[1] "Match not found"
[1] "Match not found"
Abschluss
Wann immer die Möglichkeit besteht, dass unsere Daten fehlende Werte aufweisen, müssen wir Code schreiben, der die fehlenden Werte von anderen Werten trennt.