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 |