Saknade värden inom datavetenskap uppstår när en observation saknas i en kolumn i en dataram eller innehåller ett teckenvärde istället för ett numeriskt värde. Saknade värden måste tappas eller ersättas för att dra korrekta slutsatser från data.
I denna handledning lär vi oss hur man hanterar saknade värden med dplyr-biblioteket. dplyr-biblioteket är en del av ett ekosystem för att realisera en dataanalys.
I den här handledningen lär du dig
- mutera()
- Uteslut saknade värden (NA)
- Impute Missing Values (NA) med medelvärdet och medianen
mutera()
Det fjärde verbet i dplyr-biblioteket hjälper till att skapa en ny variabel eller ändra värdena på en befintlig variabel.
Vi kommer att fortsätta i två delar. Vi lär oss att:
- exkludera saknade värden från en dataram
- tillskriva saknade värden med medelvärdet och medianen
Verbet mutera () är väldigt lätt att använda. Vi kan skapa en ny variabel efter denna syntax:
mutate(df, name_variable_1 = condition,… )arguments:-df: Data frame used to create a new variable-name_variable_1: Name and the formula to create the new variable-… : No limit constraint. Possibility to create more than one variable inside mutate()
Uteslut saknade värden (NA)
Metoden na.omit () från dplyr-biblioteket är ett enkelt sätt att utesluta saknad observation. Att släppa allt NA från data är enkelt men det betyder inte att det är den mest eleganta lösningen. Under analysen är det klokt att använda olika metoder för att hantera saknade värden
För att ta itu med problemet med missade observationer använder vi den titaniska datasetet. I denna dataset har vi tillgång till informationen om passagerarna ombord under tragedin. Denna dataset har många NA som måste tas om hand.
Vi laddar upp csv-filen från internet och kontrollerar sedan vilka kolumner som har NA. För att returnera kolumnerna med saknade data kan vi använda följande kod:
Låt oss ladda upp data och verifiera saknade data.
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv"df_titanic <- read.csv(PATH, sep = ",")# Return the column names containing missing observationslist_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]list_na
Produktion:
## [1] "age" "fare"
Här,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Ger namnet på kolumner som inte har data.
Kolumnernas ålder och biljettpris saknas värden.
Vi kan släppa dem med na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Produktion:
## [1] 1045 13
Den nya datasetet innehåller 1045 rader jämfört med 1309 med den ursprungliga datasetet.
Imputera saknade data med medelvärdet och medianen
Vi kan också tillskriva (fylla) saknade värden med medianen eller medelvärdet. En god praxis är att skapa två separata variabler för medelvärdet och medianen. När vi väl har skapat kan vi ersätta de saknade värdena med de nybildade variablerna.
Vi kommer att använda tillämpningsmetoden för att beräkna kolumnens medelvärde med NA. Låt oss se ett exempel
Steg 1) Tidigare i handledningen lagrade vi kolumnnamnet med de saknade värdena i listan som heter list_na. Vi kommer att använda den här listan
Steg 2) Nu måste vi beräkna medelvärdet med argumentet na.rm = SANT. Detta argument är obligatoriskt eftersom kolumnerna saknar data och detta ber R att ignorera dem.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Kodförklaring:
Vi skickar fyra argument i tillämpningsmetoden.
- df: df_titanic [, kolnamn (df_titanic)% i% list_na]. Den här koden returnerar kolumnnamnet från listan-objektet (dvs. "ålder" och "biljettpris")
- 2: Beräkna funktionen på kolumnerna
- medelvärde: Beräkna medelvärdet
- na.rm = SANT: Ignorera de värden som saknas
Produktion:
## age fare## 29.88113 33.29548
Vi har framgångsrikt skapat medelvärdet av kolumnerna som innehåller observationer som saknas. Dessa två värden kommer att användas för att ersätta de observationer som saknas.
Steg 3) Ersätt NA-värdena
Verbmutationen från dplyr-biblioteket är användbar för att skapa en ny variabel. Vi vill inte nödvändigtvis ändra den ursprungliga kolumnen så att vi kan skapa en ny variabel utan NA. mutation är lätt att använda, vi väljer bara ett variabelnamn och definierar hur denna variabel ska skapas. Här är den fullständiga koden
# Create a new variable with the mean and mediandf_titanic_replace <- df_titanic %>%mutate(replace_mean_age = ifelse(is.na(age), average_missing[1], age),replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))
Kodförklaring:
Vi skapar två variabler, ersätt_medel_ålder och ersätt_medel_flygning enligt följande:
- ersätt_medean_ålder = ifelse (is.na (ålder), genomsnittlig_missande [1], ålder)
- ersätt_mean_fare = ifelse (is.na (biljettpris), genomsnittlig_missning [2], biljettpris)
Om kolumnåldern saknar värden, ersätt den sedan med det första elementet i medel_missande (medelålder), annars behåll de ursprungliga värdena. Samma logik för priset
sum(is.na(df_titanic_replace$age))
Produktion:
## [1] 263
Utför bytet
sum(is.na(df_titanic_replace$replace_mean_age))
Produktion:
## [1] 0
Den ursprungliga kolumnåldern har 263 värden som saknas medan den nyskapade variabeln har ersatt dem med medelvärdet för variabelåldern.
Steg 4) Vi kan också ersätta de saknade observationerna med medianen.
median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,median,na.rm = TRUE)df_titanic_replace <- df_titanic %>%mutate(replace_median_age = ifelse(is.na(age), median_missing[1], age),replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))head(df_titanic_replace)
Produktion:
Steg 5) En stor datamängd kan ha många saknade värden och metoden ovan kan vara besvärlig. Vi kan utföra alla ovanstående steg i en kodrad med metoden sapply (). Även om vi inte skulle känna till värdena för medelvärdet och medianen.
sapply skapar inte en dataram, så vi kan slå in sapply () -funktionen i data.frame () för att skapa ett dataramobjekt.
# Quick code to replace missing values with the meandf_titanic_impute_mean < -data.frame(sapply(df_titanic,function(x) ifelse(is.na(x),mean(x, na.rm = TRUE),x)))
Sammanfattning
Vi har tre metoder för att hantera saknade värden:
- Uteslut alla observationer som saknas
- Tillskriv med medelvärdet
- Imputer med medianen
Följande tabell sammanfattar hur man tar bort alla observationer som saknas
Bibliotek | Mål | Koda |
---|---|---|
bas | Lista saknade observationer |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Ta bort alla värden som saknas |
na.omit(df) |
Imputation med medelvärde eller median kan göras på två sätt
- Använda applicera
- Använda sapply
Metod | Detaljer | Fördelar | Nackdelar |
---|---|---|---|
Steg för steg med applicera | Kontrollera kolumner med saknade, beräkna medelvärde / median, spara värdet, ersätt med mutera () | Du vet värdet av medel / median | Mer exekveringstid. Kan vara långsam med stora dataset |
Snabbt sätt med sapply | Använd sapply () och data.frame () för att automatiskt söka och ersätta saknade värden med medelvärde / median | Kort kod och snabb | Vet inte imputeringsvärdena |