Kako nadomestiti manjkajoče vrednosti (NA) v R: na.omit & na.rm

Kazalo:

Anonim

Manjkajoče vrednosti v znanosti o podatkih nastanejo, kadar opazovanje manjka v stolpcu podatkovnega okvira ali vsebuje vrednost znaka namesto številske vrednosti. Manjkajoče vrednosti je treba spustiti ali nadomestiti, da bi iz podatkov lahko sklepali pravilno.

V tej vadnici se bomo naučili, kako ravnati z manjkajočimi vrednostmi s knjižnico dplyr. dplyr knjižnica je del ekosistema za izvedbo analize podatkov.

V tej vadnici boste izvedeli

  • mutiraj ()
  • Izključi manjkajoče vrednosti (NA)
  • Vstavite manjkajoče vrednosti (NA) s srednjo in srednjo vrednostjo

mutiraj ()

Četrti glagol v knjižnici dplyr je koristen za ustvarjanje nove spremenljivke ali spreminjanje vrednosti obstoječe spremenljivke.

Nadaljevali bomo v dveh delih. Naučili se bomo, kako:

  • izključi manjkajoče vrednosti iz podatkovnega okvira
  • manjkajoče vrednosti pripiši srednji in srednji vrednosti

Glagol mutate () je zelo enostaven za uporabo. Po tej sintaksi lahko ustvarimo novo spremenljivko:

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

Izključi manjkajoče vrednosti (NA)

Metoda na.omit () iz knjižnice dplyr je preprost način za izključitev manjkajočega opazovanja. Odstranjevanje vseh NA iz podatkov je enostavno, vendar ne pomeni, da je to najbolj elegantna rešitev. Med analizo je pametno uporabiti različne metode za reševanje manjkajočih vrednosti

Za reševanje problema manjkajočih opazovanj bomo uporabili nabor podatkov titanic. V tem naboru podatkov imamo dostop do informacij o potnikih na krovu med tragedijo. V tem naboru podatkov je veliko NA, za katere je treba poskrbeti.

Datoteko csv bomo naložili z interneta in nato preverili, v katerih stolpcih je NA. Za vrnitev stolpcev z manjkajočimi podatki lahko uporabimo naslednjo kodo:

Naložimo podatke in preverimo manjkajoče podatke.

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

Izhod:

## [1] "age" "fare"

Tukaj,

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

Daje ime stolpcev, ki nimajo podatkov.

V stolpcih starost in cena manjkajo vrednosti.

Spustimo jih lahko z na.omit ().

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

Izhod:

## [1] 1045 13

Novi nabor podatkov vsebuje 1045 vrstic v primerjavi s 1309 pri prvotnem naboru podatkov.

Vstavite manjkajoče podatke s povprečno in srednjo vrednostjo

Manjkajoče vrednosti bi lahko pripisali tudi (napolnili) s srednjo ali srednjo vrednostjo. Dobra praksa je ustvariti dve ločeni spremenljivki za srednjo in srednjo vrednost. Ko so enkrat ustvarjene, lahko manjkajoče vrednosti nadomestimo z novo oblikovanimi spremenljivkami.

Za izračun povprečja stolpca z NA bomo uporabili metodo apply. Poglejmo primer

1. korak) Prej v vadnici smo ime stolpca z manjkajočimi vrednostmi shranili na seznam, imenovan list_na. Uporabili bomo ta seznam

Korak 2) Zdaj moramo izračunati srednjo vrednost z argumentom na.rm = TRUE. Ta argument je obvezen, ker v stolpcih manjkajo podatki, kar R-ju pravi, naj jih prezre.

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

Razlaga kode:

V metodi uporabe posredujemo 4 argumente.

  • df: df_titanic [, colnames (df_titanic)% v% list_na]. Ta koda bo vrnila ime stolpca iz predmeta list_na (tj. "Starost" in "cena")
  • 2: Izračunajte funkcijo v stolpcih
  • pomeni: Izračunaj povprečje
  • na.rm = TRUE: prezrite manjkajoče vrednosti

Izhod:

## age fare## 29.88113 33.29548

Uspešno smo ustvarili sredino stolpcev z manjkajočimi opazovanji. Ti dve vrednosti bosta uporabljeni za nadomestitev manjkajočih opazovanj.

Korak 3) Zamenjajte vrednosti NA

Mutacija glagola iz knjižnice dplyr je koristna pri ustvarjanju nove spremenljivke. Ni nujno, da želimo spremeniti prvotni stolpec, da bomo lahko ustvarili novo spremenljivko brez NA. mutate je enostaven za uporabo, samo izberemo ime spremenljivke in določimo, kako ustvariti to spremenljivko. Tu je celotna 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))

Razlaga kode:

Ustvarimo dve spremenljivki, replace_mean_age in replace_mean_fare, kot sledi:

  • replace_mean_age = ifelse (is.na (starost), povprečno_pogrešano [1], starost)
  • replace_mean_fare = ifelse (is.na (vozovnica), povprečna_nevarna [2], cena)

Če v starosti stolpca manjkajo vrednosti, jo nadomestite s prvim elementom povprečno_missing (povprečna starost), sicer ohranite prvotne vrednosti. Ista logika za vozovnice

sum(is.na(df_titanic_replace$age))

Izhod:

## [1] 263

Izvedite zamenjavo

sum(is.na(df_titanic_replace$replace_mean_age))

Izhod:

## [1] 0 

Prvotna starost stolpca vsebuje 263 manjkajočih vrednosti, medtem ko jih je novo ustvarjena spremenljivka nadomestila s srednjo vrednostjo spremenljivke starost.

4. korak) Manjkajoča opazovanja lahko nadomestimo tudi z mediano.

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)

Izhod:

5. korak) Velik nabor podatkov lahko vsebuje veliko manjkajočih vrednosti in zgornja metoda je lahko okorna. Vse zgornje korake lahko izvedemo v eni vrstici kode z uporabo metode sapply (). Čeprav ne bi poznali srednjih in srednjih vrednosti.

sapply ne ustvari podatkovnega okvira, zato lahko funkcijo sapply () zavijemo v data.frame (), da ustvarimo objekt podatkovnega okvira.

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

Povzetek

Za odpravljanje manjkajočih vrednosti imamo tri metode:

  • Izključite vsa manjkajoča opažanja
  • Pripisujte povprečje
  • Pripisujte mediano

Naslednja tabela povzema, kako odstraniti vsa manjkajoča opažanja

Knjižnica Cilj Koda
osnova Navedite manjkajoča opažanja
colnames(df)[apply(df, 2, anyNA)]
dplyr Odstranite vse manjkajoče vrednosti
na.omit(df)

Imputacijo s srednjo ali srednjo vrednostjo lahko izvedemo na dva načina

  • Uporaba uporabi
  • Uporaba sapply
Metoda Podrobnosti Prednosti Slabosti
Korak za korakom z prijavo Preverite stolpce z manjkajočimi, izračunajte povprečje / srednjo vrednost, shranite vrednost, zamenjajte z mutate () Vrednost sredstev / mediana poznate Več časa za izvedbo. Z velikim naborom podatkov je lahko počasen
Hitra pot s sapply Uporabite sapply () in data.frame () za samodejno iskanje in nadomeščanje manjkajočih vrednosti s srednjo / srednjo vrednostjo Kratka koda in hitro Ne poznam imputacijskih vrednosti