Puuttuvien arvojen korvaaminen ryhmässä R: na.omit & na.rm

Sisällysluettelo:

Anonim

Puuttuvat arvot datatieteessä syntyvät, kun havainto puuttuu datakehyksen sarakkeesta tai sisältää merkin arvon numeerisen arvon sijaan. Puuttuvat arvot on pudotettava tai korvattava, jotta tiedoista voidaan tehdä oikea johtopäätös.

Tässä opetusohjelmassa opitaan, miten puuttuvista arvoista voidaan puuttua dplyr-kirjastolla. dplyrin kirjasto on osa ekosysteemiä data-analyysin toteuttamiseksi.

Tässä opetusohjelmassa opit

  • muuttua()
  • Sulje pois puuttuvat arvot (NA)
  • Vaikuta puuttuvat arvot (NA) keskiarvoon ja mediaaniin

muuttua()

Dplyr-kirjaston neljäs verbi auttaa luomaan uuden muuttujan tai muuttamaan olemassa olevan muuttujan arvoja.

Jatkamme kahdessa osassa. Opimme kuinka:

  • poista puuttuvat arvot datakehyksestä
  • laskea puuttuvat arvot keskiarvolla ja mediaanilla

Verbi mutate () on erittäin helppo käyttää. Voimme luoda uuden muuttujan tämän syntaksin mukaisesti:

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

Sulje pois puuttuvat arvot (NA)

Na.omit () -menetelmä dplyrin kirjastosta on yksinkertainen tapa sulkea pois puuttuva havainto. Kaikkien NA-tietojen pudottaminen tiedoista on helppoa, mutta se ei tarkoita, että se on tyylikkäin ratkaisu. Analyysin aikana on viisasta käyttää erilaisia ​​menetelmiä puuttuvien arvojen käsittelemiseksi

Puuttuvien havaintojen ongelman ratkaisemiseksi käytämme titaanista tietoaineistoa. Tässä tietojoukossa meillä on pääsy aluksella olevien matkustajien tietoihin tragedian aikana. Tässä tietojoukossa on monia NA: ta, jotka on hoidettava.

Lähetämme csv-tiedoston Internetistä ja tarkistamme sitten sarakkeet, joissa on NA. Palataksemme sarakkeet puuttuvilla tiedoilla voimme käyttää seuraavaa koodia:

Ladataan tiedot ja tarkistetaan puuttuvat tiedot.

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

Tuotos:

## [1] "age" "fare"

Tässä,

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

Antaa niiden sarakkeiden nimen, joilla ei ole tietoja.

Ikä- ja hinta-sarakkeista puuttuu arvoja.

Voimme pudottaa ne na.omit ().

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

Tuotos:

## [1] 1045 13

Uusi tietojoukko sisältää 1045 riviä verrattuna 1309 alkuperäiseen tietojoukkoon.

Määritä puuttuvat tiedot keskiarvolla ja mediaanilla

Voimme myös laskea (täyttää) puuttuvat arvot mediaanilla tai keskiarvolla. Hyvä käytäntö on luoda kaksi erillistä muuttujaa keskiarvolle ja mediaanille. Kun ne on luotu, voimme korvata puuttuvat arvot uusilla muuttujilla.

Laskemme sarakkeen keskiarvon NA: lla sovellusmenetelmällä. Katsotaanpa esimerkki

Vaihe 1) Aikaisemmin opetusohjelmassa tallensimme sarakkeiden nimen puuttuvien arvojen kanssa luetteloon nimeltä list_na. Käytämme tätä luetteloa

Vaihe 2) Nyt meidän on laskettava keskiarvo argumentilla na.rm = TOSI. Tämä argumentti on pakollinen, koska sarakkeista puuttuu tietoja, ja tämä käskee R: n jättämään ne huomiotta.

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

Koodin selitys:

Annamme 4 argumenttia Apply-menetelmässä.

  • df: df_titanic [, colnames (df_titanic)% kohteessa% list_na]. Tämä koodi palauttaa sarakkeiden nimen list_na-objektista (eli "ikä" ja "hinta")
  • 2: Laske funktio sarakkeissa
  • keskiarvo: Laske keskiarvo
  • na.rm = TOSI: Ohita puuttuvat arvot

Tuotos:

## age fare## 29.88113 33.29548

Puuttuvien havaintojen sisältävien sarakkeiden keskiarvo luotiin onnistuneesti. Näitä kahta arvoa käytetään korvaamaan puuttuvat havainnot.

Vaihe 3) Vaihda NA-arvot

Dplyr-kirjastosta tuleva verbimutaatio on hyödyllinen uuden muuttujan luomisessa. Emme välttämättä halua muuttaa alkuperäistä saraketta, jotta voimme luoda uuden muuttujan ilman NA: ta. Mutaatio on helppokäyttöinen, valitsemme vain muuttujan nimen ja määrittelemme, kuinka tämä muuttuja luodaan. Tässä on täydellinen koodi

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

Koodin selitys:

Luomme kaksi muuttujaa, korvaa_mean_age ja korvaa_mean_fare seuraavasti:

  • Replace_mean_age = ifelse (is.na (ikä), keskimääräinen puuttuva [1], ikä)
  • korvaava_hinta_hinta = ifelse (is.na (hinta), keskimääräinen puuttuva [2], hinta)

Jos sarakkeen iästä puuttuu arvoja, korvaa se keskiarvon (ikän keskiarvo) ensimmäisellä elementillä, muuten säilytä alkuperäiset arvot. Sama logiikka hinnalle

sum(is.na(df_titanic_replace$age))

Tuotos:

## [1] 263

Suorita vaihto

sum(is.na(df_titanic_replace$replace_mean_age))

Tuotos:

## [1] 0 

Alkuperäisessä sarakkeen ikässä on 263 puuttuvaa arvoa, kun taas uusi luotu muuttuja on korvannut ne muuttujan ikän keskiarvolla.

Vaihe 4) Voimme korvata puuttuvat havainnot myös mediaanilla.

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)

Tuotos:

Vaihe 5) Suuressa tietojoukossa voi olla paljon puuttuvia arvoja, ja yllä oleva menetelmä voi olla hankala. Voimme suorittaa kaikki yllä olevat vaiheet yhdellä koodirivillä sapply () -menetelmällä. Vaikka emme tietäisikään keskiarvoa ja mediaania.

sapply ei luo datakehystä, joten voimme kääriä sapply () -funktion data.frame () -ohjelmaan luoda datakehysobjekti.

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

Yhteenveto

Meillä on kolme tapaa puuttuvien arvojen käsittelemiseksi:

  • Sulje pois kaikki puuttuvat havainnot
  • Vaikuta keskiarvoon
  • Vaikuta mediaaniin

Seuraava taulukko esittää yhteenvedon siitä, miten kaikki puuttuvat havainnot voidaan poistaa

Kirjasto Tavoite Koodi
pohja Luettele puuttuvat havainnot
colnames(df)[apply(df, 2, anyNA)]
dplyr Poista kaikki puuttuvat arvot
na.omit(df)

Imputointi keskiarvolla tai mediaanilla voidaan tehdä kahdella tavalla

  • Käyttämällä sovelletaan
  • Käyttämällä sapply
Menetelmä Yksityiskohdat Edut Haitat
Vaiheittainen hakemus Tarkista puuttuvat sarakkeet, laske keskiarvo / mediaani, tallenna arvo, korvaa mutaatilla () Tiedät keskiarvon / mediaanin arvon Lisää toteutusaikaa. Voi olla hidasta suurella tietojoukolla
Nopea tapa sapplyllä Käytä sapply () ja data.frame () hakeaksesi ja korvaamaan puuttuvat arvot automaattisesti keskiarvolla / mediaanilla Lyhyt koodi ja nopea En tiedä imputointiarvoja