Missing Values (NA) in R - Wie du damit umgehst und was du wissen musst | R Coding (2024)

Im heutigen Post werde ich genauer auf fehlende Werte („missings“, „missing values“) eingehen. R hat einen eigenen Wert für fehlende Werte, nämlich NA (für „not available“). Missings können ein heikles Thema sein, aber wenn man damit umzugehen weiß, ist es alles nur noch halb so schlimm!

Die Grundlagen

Wir fangen mit den Grundlagen an. Wie schon erwähnt, werden fehlende Werte in R mit dem Wert NA dargestellt. NA ist hierbei keine Zeichenkette (d.h., kein character vector), sondern tatsächlich ein R-eigener Wert, der entsprechend farblich markiert wird. Wir können zum Beispiel einen Vektor mit einem Element erstellen, welches „missing“ ist: missingValue <- NA. Das Objekt missingValue beinhaltet nun einen Wert, der fehlend ist. Genauso können wir einen Vektor erstellen und ihn mit 100 missings füllen: vecMissings <- rep(NA, 100). Mit der Funktion rep ("replicate") ist das einfach getan. Mit missings kann man auch (mehr oder minder) Dinge berechnen. Zum Beispiel ergibt 1 + missingValue selbst wieder NA. Das ergibt Sinn, da wir (und R) ja nicht wissen, was missingValue überhaupt für einen Wert enthält. 1 + missingValue könnte also alles sein - wir wissen es aber nicht, und somit erhalten wir ein NA.

Auf Missings überprüfen

In einer explorativen Analyse eines Datensatzes ist es immer ratsam, eine "missing value analysis" durchzuführen. So können wir zum Beispiel gezielt überprüfen, ob ein Vektor fehlende Werte enthält oder nicht. Entgegen der Intuition können wir dies allerdings nicht mit dem Vergleichsoperator == machen. Denn tun wir dies, erhalten wir wieder selbst ein Missing: missingValue == NA. Stattdessen müssen wir die Funktion is.na benutzen: is.na(missingValue). Im Folgenden werde ich diese Funktion anhand eines simplen Beispiels veranschaulichen.

Beispiel

Angenommen wir haben eine dieser kleinen Garten-Wetterstationen auf einer Terrasse stehen und speichern jede Nacht um 23:59 Uhr die Maximaltemperatur des vergangenen Tages. Allerdings gibt es ein Problem: die Station ist schon etwas älter und es gibt hin und wieder Übertragungsfehler, sodass kein Wert für den jeweiligen Tag gespeichert wird. Für die letzte sonnige Woche hätten wir also zum Beispiel einen Vektor mit sieben Elementen: tempVec <- c(24.1, 28.3, 26.8, 23.5, NA, 25.6, NA). Wir sehen: Zwei Mal wurde der Wert nicht gespeichert. Da wir mittlerweile schon data frames kennen (wenn nicht, schau hier und hier), verschönern wir das Beispiel noch etwas und ordnen diese Temperaturen bestimmten Datumseinträgen zu. Den Datumsvektor erstellen wir wie folgt (heute noch etwas umständlicher per Hand): dateVec <- as.Date(c("2016-09-10", "2016-09-11", "2016-09-12", "2016-09-13", "2016-09-14", "2016-09-15", "2016-09-16")). Und beide Vektoren in ein data frame: dfTemp <- data.frame(Datum=dateVec, Temperatur=tempVec). Jetzt haben wir einen Minidatensatz mit Temperaturen je Datum.

Mit der is.na-Funktion können wir jetzt jedes Element im Temperaturvektor überprüfen, ob es missing ist oder nicht: is.na(dfTemp$Temperatur). Das ist schonmal ein guter Anfang, aber gerade für große Vektoren ist es lästig, jedes Element anzuzeigen. Stattdessen schauen wir uns einfach genau an, welche Elemente missing sind, und speichern die Positionen in missingCases: missingCases <- which(is.na(dfTemp$Temperatur)==TRUE). Mit which fragen wir hier also: Welche Elemente in dfTemp$Temperatur sind missings? Jetzt haben wir die Fälle (die Reihen), für die es missings in der Spalte "Temperatur" gibt. Entsprechend können wir uns die Tage anzeigen lassen, an denen es Probleme mit dem Speichern der Temperaturen gab: dfTemp$Datum[missingCases].

Möchten wir einfach nur wissen, wie viele Missings es gibt, so können wir folgendes tun: sum(is.na(dfTemp$Temperatur)). Warum funktioniert das? Wir erinnern uns (oder schauen oben nochmal hin): is.na(dfTemp$Temperatur) gibt uns einen Vektor mit TRUE/FALSE - Werten zurück (ein logical vector in R-Sprache). Da TRUE-Werte der 1 und FALSE-Werte der 0 entsprechen (und das von R automatisch umgewandelt wird), können wir den logical-Vektor einfach mit sum aufsummieren und kommen so zu unserem Ergebnis. Für eine generelle Übersicht können wir auch immer die summary-Funktion benutzen: summary(dfTemp$Temperatur); wir sehen, dass es hier auch eine Spalte gibt, die die Anzahl der NA's anzeigt.

Funktionen und Missings

Wir müssen immer auf NA's gefasst sein, da die meisten Funktionen fehlende Werte berücksichtigen und ihr Ergebnis entsprechend anpassen. Beispiel: max(dfTemp$Temperatur). Hier wollten wir schnell schauen, an welchem Tag es am wärmsten war. Allerdings haben wir nicht beachtet, dass es Missings geben könnte und bekommen in unserem Fall auch gleich ein NA zurück. Wie könnte man auch das Maximum herausfinden, wenn sie nicht weiß, wie die Temperatur an zwei der sieben Tage war? Wir müssen der Funktion also sagen: Gib uns den Maximalwert, aber nehme NA's aus deiner Berechnung heraus. Wir müssen also das Funktionsargument na.rm ("NA remove") mit übergeben: max(dfTemp$Temperatur, na.rm=TRUE). Und schon klappt es. Im Übrigen gilt das auch für andere Funktionen, z.B. mean, median, sum, usw.

Den Datensatz in Hinsicht auf Missings anpassen

Manchmal wollen wir alle weiteren Berechnungen nur mit einem vollständigen Datensatz durchführen. In unserem Fall schmeißen wir also alle Fälle raus, für die es Missings gab. Das lässt sich schnell erledigen: dfValidTemp <- dfTemp[!is.na(dfTemp$Temperatur),]. Wir definieren ein neues data frame dfValidTemp, welches im Prinzip dfTemp ist, aber nur die Fälle, für die es keine Missings gibt. Das Ausrufezeichen bedeutet hier "nicht", wörtlich also "dfTemp, für das gilt: nicht missing(dfTemp$Temperatur)".

Missings beim Lesen und Schreiben von Dateien

Zuletzt möchte ich noch kurz auf Missings beim Lesen und Schreiben von Dateien eingehen. Missings werden gelegentlich als bestimmte numerische Werte angegeben, welche per se unmöglich sind. Ein klassisches Beispiel sind hier Werte wie -999 oder -9999. Es wäre doch hilfreich, diese Werte sofort als Missings in R zu haben. Kein Problem: Wir können das gleich beim Einlesen einer Datei angeben: df <- read.csv("example.csv", na.strings="-999"). Hier haben wir einfach beim Funktionsargument na.strings den jeweiligen Wert angegeben. Gibt es mehrere Möglichkeiten, übergeben wir einfach einen Vektor im typischen R-Stil: df <- read.csv("example.csv", na.strings=c("-999", "-9999")). Alles, was vorher in der CSV-Datei als -999 oder -9999 stand, müsste jetzt in R ein NA sein. Beim Schreiben gibt es auch ein bestimmtes Argument, das uns bestimmen lässt, wie wir NA's in eine Datei schreiben möchten: write.csv(df, "example.csv", row.names=F, na=""). In diesem Fall möchten wir einfach gar nichts schreiben, dementsprechend setzen wir für na einen leeren character.

Hast du noch mehr Fragen zu Missings oder ein bestimmtes Problem in einem anderen Bereich? Schreib mir einfach eine Mail: mail@r-coding.de.
Bleib außerdem auf dem Laufenden mit dem r-coding Newsletter. Du erhältst Infos zu neuen Blogeinträgen, sowie kleine Tipps und Tricks zu R. Melde dich jetzt an: http://r-coding.de/newsletter.

Cheers!

Foto von Caleb Roenigk (siehe hier auf flickr), lizensiert unter CC2.0, modifiziert mit Schwarz-Weiß-Filter.

Missing Values (NA) in R - Wie du damit umgehst und was du wissen musst | R Coding (2024)

FAQs

How to find missing values in R programming? ›

To see which values in each of these vectors R recognizes as missing, we can use the is.na function. It will return a TRUE/FALSE vector with as any elements as the vector we provide. We can see that R distinguishes between the NA and “NA” in x2–NA is seen as a missing value, “NA” is not.

How to tell R to ignore na values? ›

We set na. rm = TRUE in common R functions to exclude missing (NA) values.

How to get rid of missing values in R? ›

In base R, use na. omit() to remove all observations with missing data on ANY variable in the dataset, or use subset() to filter out cases that are missing on a subset of variables.

How do you count the number of missing values in R? ›

Find and Count Missing Values in the R DataFrame

To find the location of the missing value use which() method in which is.na() method is passed to which() method. To count the total number of missing values use the sum() method in which is.na() method is passed.

How to recode missing values in R? ›

To recode missing values; or recode specific indicators that represent missing values, we can use normal subsetting and assignment operations. For example, we can recode missing values in vector x with the mean values in x by first subsetting the vector to identify NA s and then assign these elements a value.

How to find mean in R with missing values? ›

In handling missing values to calculate column means, R provides a robust solution. By utilizing the colMeans() function with the parameter na. rm = TRUE, we effectively handle NA values, ensuring accurate computations.

How to replace NA with missing values in R? ›

Replace NA values with Blank Space using replace()

Parameters: The first parameter is the input data frame. The second parameter uses the is.na() method to check for missing values (NA). The final parameter specifies the value “”, which will replace any missing values identified by the second parameter.

How to select only NA values in R? ›

To select rows with NA values in R, we can use logical indexing combined with the is.na function. The is.na function returns a logical vector indicating which elements are NA. In this code snippet, we use the apply function to apply the any and is.na functions row-wise.

How do you check for any NA values in R? ›

A: You can use the is.na() function to check for NA values in R. It returns a logical vector indicating which elements are NA . Q: Can NA values affect the outcome of logical operations in R? A: Yes, NA values can affect the outcome of logical operations.

How to remove data values in R? ›

remove and rm are identical R functions that can be used to remove objects. These can be specified successively as character strings, or in the character vector list , or through a combination of both. All objects thus specified will be removed.

How to use is na in R? ›

is.na () is used to deal with missing values in the dataset or data frame. We can use this method to check the NA field in a data frame and help to fill them. To deal with missing values, one's can fill empty fields by NA's using fill. NAs() .

How to get rid of NA? ›

To remove all rows having NA, we can use na. omit() function. For Example, if we have a data frame called df that contains some NA values then we can remove all rows that contains at least one NA by using the command na.

How to check for missing values in a DataFrame? ›

Next, we would like to check if there are any missing values. To check this, we can use the function dataframe. isnull() in pandas. It will return True for missing components and False for non-missing cells.

How to find percentage of missing values in each column in R? ›

Calculate the percentage by dividing the number of missing values by the total number of entries in each column and multiplying the result by 100. Hardik S. You can directly run a . isnull().

How to count na values in a vector in R? ›

First of all, to count the total number of NA s in a vector you can simply sum() up the result of is.na() . Confused why you can sum TRUE and FALSE values? R automatically converts logical vectors to integer vectors when using arithmetic functions.

How to find missing values in R data table? ›

Finding Missing Data in R

We can use the is.na() inbuilt function in R to check for NA values. This function returns a vector that contains only logical value (either True or False). For the NA values in the original dataset, the corresponding vector value should be True otherwise it should be False.

How do you find missing values? ›

Step 1: Count how many elements are in the data set. This number includes the missing value. Step 2: Multiply the mean by the number of elements found in the data set. Step 3: Subtract all of the known values from the product obtained from step 2.

How to check missing values in categorical variables in R? ›

Identifying Missing Values:

Use the `is.na()` function to identify missing values in your dataset. This function returns a logical vector indicating which elements are missing. — Utilize the `summary()` function to get an overview of missing values in each column of your dataset.

How do I check if data is missing at random in R? ›

To check if your data are MAR, take each column with missingness and recode it as one if it is missing and zero otherwise. Then regress each of the the other variables onto it using a logistic regression. A significant p-value indicates an association between the regressor and missingness, meaning your data are MAR.

Top Articles
ATM Near Me | Find The Nearest ATM Location | ATM Locator NL
ATMs in the Netherlands: locations, fees, and tips
Spasa Parish
Rentals for rent in Maastricht
159R Bus Schedule Pdf
Sallisaw Bin Store
Black Adam Showtimes Near Maya Cinemas Delano
Espn Transfer Portal Basketball
Pollen Levels Richmond
11 Best Sites Like The Chive For Funny Pictures and Memes
Things to do in Wichita Falls on weekends 12-15 September
Momokun Leaked Controversy - Champion Magazine - Online Magazine
Maine Coon Craigslist
‘An affront to the memories of British sailors’: the lies that sank Hollywood’s sub thriller U-571
Tyreek Hill admits some regrets but calls for officer who restrained him to be fired | CNN
Haverhill, MA Obituaries | Driscoll Funeral Home and Cremation Service
Rogers Breece Obituaries
Ems Isd Skyward Family Access
Elektrische Arbeit W (Kilowattstunden kWh Strompreis Berechnen Berechnung)
Omni Id Portal Waconia
Kellifans.com
Banned in NYC: Airbnb One Year Later
Four-Legged Friday: Meet Tuscaloosa's Adoptable All-Stars Cub & Pickle
Model Center Jasmin
Ice Dodo Unblocked 76
Is Slatt Offensive
Labcorp Locations Near Me
Storm Prediction Center Convective Outlook
Experience the Convenience of Po Box 790010 St Louis Mo
Fungal Symbiote Terraria
modelo julia - PLAYBOARD
Abby's Caribbean Cafe
Joanna Gaines Reveals Who Bought the 'Fixer Upper' Lake House and Her Favorite Features of the Milestone Project
Tri-State Dog Racing Results
Navy Qrs Supervisor Answers
Trade Chart Dave Richard
Lincoln Financial Field Section 110
Free Stuff Craigslist Roanoke Va
Stellaris Resolution
Wi Dept Of Regulation & Licensing
Pick N Pull Near Me [Locator Map + Guide + FAQ]
Crystal Westbrooks Nipple
Ice Hockey Dboard
Über 60 Prozent Rabatt auf E-Bikes: Aldi reduziert sämtliche Pedelecs stark im Preis - nur noch für kurze Zeit
Wie blocke ich einen Bot aus Boardman/USA - sellerforum.de
Infinity Pool Showtimes Near Maya Cinemas Bakersfield
Hooda Math—Games, Features, and Benefits — Mashup Math
Dermpathdiagnostics Com Pay Invoice
How To Use Price Chopper Points At Quiktrip
Maria Butina Bikini
Busted Newspaper Zapata Tx
Latest Posts
Article information

Author: Pres. Carey Rath

Last Updated:

Views: 6447

Rating: 4 / 5 (41 voted)

Reviews: 80% of readers found this page helpful

Author information

Name: Pres. Carey Rath

Birthday: 1997-03-06

Address: 14955 Ledner Trail, East Rodrickfort, NE 85127-8369

Phone: +18682428114917

Job: National Technology Representative

Hobby: Sand art, Drama, Web surfing, Cycling, Brazilian jiu-jitsu, Leather crafting, Creative writing

Introduction: My name is Pres. Carey Rath, I am a faithful, funny, vast, joyous, lively, brave, glamorous person who loves writing and wants to share my knowledge and understanding with you.