Hur man byter ut saknade värden (NA) i R: na.omit & na.rm

Innehållsförteckning:

Anonim

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