Kako zamijeniti nedostajuće vrijednosti (NA) u R: na.omit & na.rm

Sadržaj:

Anonim

Vrijednosti koje nedostaju u znanosti o podacima nastaju kada promatranje nedostaje u stupcu okvira podataka ili ako umjesto numeričke vrijednosti sadrži vrijednost znaka. Vrijednosti koje nedostaju moraju se ispustiti ili zamijeniti kako bi se iz podataka izvukao točan zaključak.

U ovom uputstvu naučit ćemo kako se nositi s nedostajućim vrijednostima pomoću biblioteke dplyr. dplyr knjižnica dio je ekosustava za realizaciju analize podataka.

U ovom ćete tutorijalu naučiti

  • mutirati()
  • Izuzmi vrijednosti koje nedostaju (NA)
  • Umetnite vrijednosti koje nedostaju (NA) s prosjekom i medijanom

mutirati()

Četvrti glagol u knjižnici dplyr koristan je za stvaranje nove varijable ili promjenu vrijednosti postojeće varijable.

Nastavit ćemo u dva dijela. Naučit ćemo kako:

  • izuzeti vrijednosti koje nedostaju iz okvira podataka
  • vrijednosti koje nedostaju pripisuju srednjoj i srednjoj vrijednosti

Glagol mutate () vrlo je jednostavan za upotrebu. Možemo stvoriti novu varijablu slijedeći ovu sintaksu:

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

Izuzmi vrijednosti koje nedostaju (NA)

Na.omit () metoda iz biblioteke dplyr jednostavan je način za isključivanje opažanja koje nedostaje. Ispuštanje svih NA iz podataka jednostavno je, ali ne znači da je to najelegantnije rješenje. Tijekom analize pametno je koristiti razne metode za rješavanje nedostajućih vrijednosti

Za rješavanje problema nedostajućih opažanja poslužit ćemo se titanskim skupom podataka. U ovom skupu podataka imamo pristup informacijama o putnicima na brodu tijekom tragedije. Ovaj skup podataka sadrži mnogo NA o kojima treba voditi računa.

Prenijet ćemo csv datoteku s interneta, a zatim provjeriti koji stupci imaju NA. Da bismo vratili stupce s podacima koji nedostaju, možemo se poslužiti sljedećim kodom:

Učitajmo podatke i provjerimo podatke koji nedostaju.

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

Izlaz:

## [1] "age" "fare"

Ovdje,

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

Daje ime stupaca koji nemaju podatke.

Vrijednosti stupaca i cijena nemaju vrijednosti.

Možemo ih ispustiti pomoću na.omit ().

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

Izlaz:

## [1] 1045 13

Novi skup podataka sadrži 1045 redaka u usporedbi s 1309 s izvornim skupom podataka.

Imputiraj nedostajuće podatke s prosjekom i medijanom

Vrijednosti koje nedostaju mogli bismo imputirati (popuniti) medijanom ili srednjom vrijednosti. Dobra je praksa stvoriti dvije odvojene varijable za srednju vrijednost i medijan. Jednom stvorene vrijednosti možemo zamijeniti novoformiranim varijablama.

Upotrijebit ćemo metodu apply za izračunavanje srednje vrijednosti stupca s NA. Pogledajmo primjer

Korak 1) Ranije u vodiču spremili smo ime stupaca s vrijednostima koje nedostaju na popis nazvan list_na. Koristit ćemo ovaj popis

Korak 2) Sada moramo izračunati srednju vrijednost s argumentom na.rm = TRUE. Ovaj je argument obvezan jer u stupcima nedostaju podaci, a to govori R-u da ih ignorira.

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

Objašnjenje koda:

Prosljeđujemo 4 argumenta u metodi apply.

  • df: df_titanic [, colnames (df_titanic)% u% list_na]. Ovaj će kôd vratiti ime stupaca iz objekta list_na (tj. "Dob" i "cijena")
  • 2: Izračunajte funkciju na stupcima
  • mean: Izračunati srednju vrijednost
  • na.rm = TRUE: Zanemarite vrijednosti koje nedostaju

Izlaz:

## age fare## 29.88113 33.29548

Uspješno smo stvorili srednju vrijednost stupaca koji sadrže promatranja koja nedostaju. Te će se dvije vrijednosti koristiti za zamjenu opažanja koja nedostaju.

Korak 3) Zamijenite NA vrijednosti

Mutacija glagola iz biblioteke dplyr korisna je u stvaranju nove varijable. Ne želimo nužno mijenjati izvorni stupac kako bismo mogli stvoriti novu varijablu bez NA. mutate je jednostavan za upotrebu, mi samo odabiremo ime varijable i definiramo kako stvoriti ovu varijablu. Evo kompletnog koda

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

Objašnjenje koda:

Izrađujemo dvije varijable, replace_mean_age i replace_mean_fare kako slijedi:

  • replace_mean_age = ifelse (is.na (dob), prosječno_ nedostaje [1], dob)
  • replace_mean_fare = ifelse (is.na (cijena prijevoza), prosječno_ne nedostaje [2], cijena prijevoza)

Ako starosti stupca nedostaju vrijednosti, zamijenite prvim elementom prosječne_minisanja (srednja dob), inače zadržite izvorne vrijednosti. Ista logika za kartu

sum(is.na(df_titanic_replace$age))

Izlaz:

## [1] 263

Izvršite zamjenu

sum(is.na(df_titanic_replace$replace_mean_age))

Izlaz:

## [1] 0 

Izvornoj dobi stupca nedostaju 263 vrijednosti, dok ih je novostvorena varijabla zamijenila sredinom varijable dob.

Korak 4) Opažanja koja nedostaju možemo zamijeniti i medijanom.

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)

Izlaz:

Korak 5) Veliki skup podataka može sadržavati puno vrijednosti koje nedostaju, a gornja metoda može biti glomazna. Sve gore navedene korake možemo izvršiti u jednom retku koda metodom sapply (). Iako ne bismo znali doline srednje i srednje vrijednosti.

sapply ne stvara podatkovni okvir, tako da funkciju sapply () možemo omotati unutar data.frame () kako bismo stvorili objekt okvira podataka.

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

Sažetak

Imamo tri metode za rješavanje nedostajućih vrijednosti:

  • Izuzmite sva opažanja koja nedostaju
  • Pripisujte srednju vrijednost
  • Pripisujte medijan

Sljedeća tablica sažima kako ukloniti sva opažanja koja nedostaju

Knjižnica Cilj Kodirati
baza Navedi opažanja koja nedostaju
colnames(df)[apply(df, 2, anyNA)]
dplyr Uklonite sve vrijednosti koje nedostaju
na.omit(df)

Pripisivanje srednje ili srednje vrijednosti može se izvršiti na dva načina

  • Koristeći apply
  • Koristeći sapply
Metoda Pojedinosti Prednosti Mane
Korak po korak s prijavom Provjerite stupce koji nedostaju, izračunajte srednju / medijanu, pohranite vrijednost, zamijenite mutate () Znate vrijednost sredstva / medijana Više vremena za izvršenje. Može biti sporo s velikim skupom podataka
Brzi način sa saply Upotrijebite sapply () i data.frame () za automatsko pretraživanje i zamjenu nedostajućih vrijednosti srednjom / medijanom Kratki kod i brzo Ne znam vrijednosti imputacije