Sådan udskiftes manglende værdier (NA) i R: na.omit & na.rm

Indholdsfortegnelse:

Anonim

Manglende værdier inden for datalogi opstår, når en observation mangler i en kolonne i en dataramme eller indeholder en tegnværdi i stedet for en numerisk værdi. Manglende værdier skal slettes eller erstattes for at drage den korrekte konklusion af dataene.

I denne vejledning lærer vi, hvordan man håndterer manglende værdier med dplyr-biblioteket. dplyr-biblioteket er en del af et økosystem for at realisere en dataanalyse.

I denne vejledning lærer du

  • mutere ()
  • Ekskluder manglende værdier (NA)
  • Impute Missing Values ​​(NA) med middelværdien og medianen

mutere ()

Det fjerde verbum i dplyr-biblioteket er nyttigt at oprette en ny variabel eller ændre værdierne på en eksisterende variabel.

Vi fortsætter i to dele. Vi lærer at:

  • ekskluder manglende værdier fra en dataramme
  • tilskrive manglende værdier med middelværdien og medianen

Verbet mutere () er meget let at bruge. Vi kan oprette en ny variabel efter denne syntaks:

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()

Ekskluder manglende værdier (NA)

Metoden na.omit () fra dplyr-biblioteket er en enkel måde at udelukke manglende observation. Det er let at slippe al NA fra dataene, men det betyder ikke, at det er den mest elegante løsning. Under analysen er det klogt at bruge forskellige metoder til at håndtere manglende værdier

For at tackle problemet med manglende observationer bruger vi det titaniske datasæt. I dette datasæt har vi adgang til informationen om passagererne om bord under tragedien. Dette datasæt har mange NA, der skal tages hånd om.

Vi uploader csv-filen fra internettet og kontrollerer derefter, hvilke kolonner der har NA. For at returnere kolonnerne med manglende data kan vi bruge følgende kode:

Lad os uploade dataene og kontrollere de manglende 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"

Her,

colnames(df_titanic)[apply(df_titanic, 2, anyNA)]

Giver navnet på kolonner, der ikke har data.

Kolonnernes alder og billetpris mangler værdier.

Vi kan slippe dem med na.omit ().

library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)

Produktion:

## [1] 1045 13

Det nye datasæt indeholder 1045 rækker sammenlignet med 1309 med det oprindelige datasæt.

Imputer manglende data med middelværdien og medianen

Vi kunne også beregne (udfylde) manglende værdier med medianen eller middelværdien. En god praksis er at oprette to separate variabler for middelværdien og medianen. Når de er oprettet, kan vi erstatte de manglende værdier med de nyoprettede variabler.

Vi bruger anvendelsesmetoden til at beregne kolonnens gennemsnit med NA. Lad os se et eksempel

Trin 1) Tidligere i vejledningen lagrede vi kolonnenavnet med de manglende værdier på listen kaldet list_na. Vi bruger denne liste

Trin 2) Nu skal vi beregne middelværdien med argumentet na.rm = SAND. Dette argument er obligatorisk, fordi kolonnerne mangler data, og dette fortæller R at ignorere dem.

# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing

Kode Forklaring:

Vi sender 4 argumenter i anvendelsesmetoden.

  • df: df_titanic [, colnames (df_titanic)% i% list_na]. Denne kode returnerer kolonnenavnet fra list_na-objektet (dvs. "alder" og "billetpris")
  • 2: Beregn funktionen på kolonnerne
  • middel: Beregn middelværdien
  • na.rm = SAND: Ignorer de manglende værdier

Produktion:

## age fare## 29.88113 33.29548

Vi oprettede middelværdien af ​​kolonnerne med manglende observationer med succes. Disse to værdier vil blive brugt til at erstatte de manglende observationer.

Trin 3) Erstat NA-værdierne

Verbets mutation fra dplyr-biblioteket er nyttigt til oprettelse af en ny variabel. Vi ønsker ikke nødvendigvis at ændre den oprindelige kolonne, så vi kan oprette en ny variabel uden NA. mutation er let at bruge, vi vælger bare et variabelnavn og definerer, hvordan denne variabel oprettes. Her er den komplette kode

# 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))

Kode Forklaring:

Vi opretter to variabler, erstatte_mean_alder og erstatte_mean_fare som følger:

  • erstatte_mean_age = ifelse (is.na (alder), gennemsnitlig [1], alder)
  • erstatte_mean_fare = ifelse (is.na (billetpris), gennemsnitlig_emission [2], billetpris)

Hvis kolonnealderen mangler værdier, skal du erstatte det med det første element i gennemsnitsalder (middelalder), ellers beholder du de oprindelige værdier. Samme logik for billetprisen

sum(is.na(df_titanic_replace$age))

Produktion:

## [1] 263

Udfør udskiftningen

sum(is.na(df_titanic_replace$replace_mean_age))

Produktion:

## [1] 0 

Den oprindelige kolonnealder har 263 manglende værdier, mens den nyoprettede variabel har erstattet dem med gennemsnittet af den variable alder.

Trin 4) Vi kan også erstatte de manglende observationer 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:

Trin 5) Et stort datasæt kan have mange manglende værdier, og ovenstående metode kan være besværlig. Vi kan udføre alle ovenstående trin i en kodelinje ved hjælp af sapply () -metoden. Skønt vi ikke ville kende værdierne for gennemsnit og median.

sapply opretter ikke en dataramme, så vi kan indpakke sapply () -funktionen inden for data.frame () for at oprette et datarammeobjekt.

# 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)))

Resumé

Vi har tre metoder til at håndtere manglende værdier:

  • Udeluk alle de manglende observationer
  • Tegn med middelværdien
  • Imputer med medianen

Følgende tabel opsummerer, hvordan du fjerner alle de manglende observationer

Bibliotek Objektiv Kode
grundlag Angiv manglende observationer
colnames(df)[apply(df, 2, anyNA)]
dplyr Fjern alle manglende værdier
na.omit(df)

Imputation med gennemsnit eller median kan ske på to måder

  • Brug anvendelse
  • Brug sapply
Metode detaljer Fordele Ulemper
Trin for trin med anvendelse Kontroller kolonner med manglende, beregne gennemsnit / median, gem værdien, erstat med mutere () Du kender værdien af ​​middel / median Mere udførelsestid. Kan være langsom med stort datasæt
Hurtig måde med sapply Brug sapply () og data.frame () til automatisk at søge og erstatte manglende værdier med middel / median Kort kode og hurtig Kender ikke imputationsværdierne