Suchen Sie mit einem booleschen Operator in R nach fehlenden Werten

Jesse John 21 Juni 2023
  1. Fehler beim Prüfen auf vorhandene Werte und fehlende Werte in R
  2. Verwenden Sie die Funktion is.na(), um nach fehlenden Werten in R zu suchen
  3. Abschluss
Suchen Sie mit einem booleschen Operator in R nach fehlenden Werten

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.

  1. Die NA-Werte müssen getrennt von allen anderen Werten abgeglichen werden.
  2. 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.

Autor: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

Verwandter Artikel - R Error