Kaip pakeisti trūkstamas vertes (NA) R: na.omit & na.rm

Trūksta duomenų mokslo reikšmių, kai trūksta stebėjimo duomenų rėmelio stulpelyje arba jame yra simbolio reikšmė, o ne skaitinė vertė. Trūkstamas reikšmes reikia išmesti arba pakeisti, kad iš duomenų būtų galima padaryti teisingą išvadą.

Šioje pamokoje sužinosime, kaip elgtis su trūkstamomis reikšmėmis naudojant „dplyr“ biblioteką. „dplyr“ biblioteka yra ekosistemos dalis, skirta atlikti duomenų analizę.

Šioje pamokoje sužinosite

  • mutuoti()
  • Išskirti trūkstamas vertes (NA)
  • Paveikti trūkstamas vertes (NA) su vidurkiu ir vidurkiu

mutuoti()

Ketvirtasis veiksmažodis dplyr bibliotekoje yra naudingas kuriant naują kintamąjį arba pakeičiant esamo kintamojo reikšmes.

Mes tęsime dvi dalis. Išmoksime, kaip:

  • neįtraukti trūkstamų reikšmių iš duomenų rėmelio
  • priskirti trūkstamas vertes vidurkiu ir mediana

Veiksmažodį mutate () labai lengva naudoti. Pagal šią sintaksę galime sukurti naują kintamąjį:

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

Išskirti trūkstamas vertes (NA)

Na.omit () metodas iš dplyr bibliotekos yra paprastas būdas pašalinti trūkstamą stebėjimą. Iš duomenų išmesti visus NA yra lengva, tačiau tai nereiškia, kad tai pats elegantiškiausias sprendimas. Atliekant analizę, protinga naudoti įvairius metodus trūkstamoms vertėms spręsti

Norėdami išspręsti trūkstamų stebėjimų problemą, naudosime titanišką duomenų rinkinį. Šiame duomenų rinkinyje turime prieigą prie tragedijos metu laive esančių keleivių informacijos. Šiame duomenų rinkinyje yra daugybė NA, kuriomis reikia pasirūpinti.

Įkelsime csv failą iš interneto ir tada patikrinsime, kuriuose stulpeliuose yra NA. Norėdami grąžinti stulpelius su trūkstamais duomenimis, galime naudoti šį kodą:

Įkelkime duomenis ir patikrinkime trūkstamus duomenis.

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

Išvestis:

## [1] "age" "fare"

Čia

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

Nurodomas stulpelių, kuriuose nėra duomenų, pavadinimas.

Amžiaus ir kainos stulpeliuose trūksta verčių.

Mes galime juos mesti su na.omit ().

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

Išvestis:

## [1] 1045 13

Naujame duomenų rinkinyje yra 1045 eilučių, palyginti su 1309 su pradiniu duomenų rinkiniu.

Įtraukite trūkstamus duomenis su vidurkiu ir mediana

Mes taip pat galėtume priskirti (užpildyti) trūkstamas reikšmes mediana arba vidurkiu. Gera praktika yra sukurti du atskirus vidurkio ir medianos kintamuosius. Sukūrę trūkstamas reikšmes galime pakeisti naujai suformuotais kintamaisiais.

Norėdami apskaičiuoti stulpelio vidurkį naudodami NA, naudosime taikymo metodą. Pažiūrėkime pavyzdį

1 žingsnis. Anksčiau pamokoje mes išsaugojome stulpelių pavadinimą su trūkstamomis reikšmėmis sąraše, vadinamame list_na Mes naudosime šį sąrašą

2 žingsnis) Dabar turime apskaičiuoti vidurkį argumentu na.rm = TRUE. Šis argumentas yra privalomas, nes stulpeliuose trūksta duomenų, todėl R liepia juos ignoruoti.

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

Kodo paaiškinimas:

Pateikiame 4 argumentus taikant metodą.

  • df: df_titanic [, colnames (df_titanic)%% list_na]. Šis kodas grąžins stulpelių pavadinimą iš objekto „list_na“ (ty „amžius“ ir „kaina“)
  • 2: Apskaičiuokite stulpelių funkciją
  • vidurkis: Apskaičiuokite vidurkį
  • na.rm = TRUE: Nepaisykite trūkstamų verčių

Išvestis:

## age fare## 29.88113 33.29548

Mes sėkmingai sukūrėme stulpelių su trūkstamais stebėjimais vidurkį. Šios dvi vertės bus naudojamos trūkstamiems stebėjimams pakeisti.

3 žingsnis. Pakeiskite NA vertes

Veiksmažodis mutate iš dplyr bibliotekos yra naudingas kuriant naują kintamąjį. Mes nebūtinai norime pakeisti pradinį stulpelį, kad galėtume sukurti naują kintamąjį be NA. „mutate“ yra lengva naudoti, mes tiesiog pasirenkame kintamojo pavadinimą ir apibrėžiame, kaip sukurti šį kintamąjį. Čia yra visas kodas

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

Kodo paaiškinimas:

Sukuriame du kintamuosius:

  • substit_mean_age = ifelse (is.na (amžius), vidutinis trūkumas [1], amžius)
  • substit_mean_fare = ifelse (is.na (kaina), vidutinis_ trūkumas [2], kaina)

Jei stulpelio amžiuje trūksta verčių, pakeiskite jį pirmuoju elementu „average_missing“ (amžiaus vidurkis), kitaip palikite pradines reikšmes. Ta pati bilieto kaina

sum(is.na(df_titanic_replace$age))

Išvestis:

## [1] 263

Atlikite pakeitimą

sum(is.na(df_titanic_replace$replace_mean_age))

Išvestis:

## [1] 0 

Pradiniame stulpelio amžiuje trūksta 263 verčių, o naujai sukurtas kintamasis jas pakeitė amžiaus kintamojo vidurkiu.

4 žingsnis) Trūkstamus stebėjimus galime pakeisti ir mediana.

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)

Išvestis:

5 žingsnis) Dideliame duomenų rinkinyje gali būti daug trūkstamų verčių, o aukščiau pateiktas metodas gali būti sudėtingas. Visus aukščiau nurodytus veiksmus galime atlikti vienoje kodo eilutėje naudodami „sapply“ () metodą. Nors mes nežinotume vidutinės ir vidutinės vertės.

„sapply“ nesukuria duomenų rėmelio, todėl funkciją „sapply“ () galime apvynioti „data.frame“ (), kad sukurtume duomenų rėmelio objektą.

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

Santrauka

Mes turime tris būdus, kaip tvarkyti trūkstamas vertes:

  • Išskirkite visus trūkstamus pastebėjimus
  • Poveikis su vidurkiu
  • Poveikis medianai

Šioje lentelėje apibendrinama, kaip pašalinti visus trūkstamus pastebėjimus

Biblioteka Tikslas Kodas
bazė Išvardykite trūkstamus pastebėjimus
colnames(df)[apply(df, 2, anyNA)]
dplyr Pašalinkite visas trūkstamas reikšmes
na.omit(df)

Įterpimas su vidurkiu arba mediana gali būti atliekamas dviem būdais

  • Naudojant taikyti
  • Naudojant sapply
Metodas Išsami informacija Privalumai Trūkumai
Žingsnis po žingsnio taikykite Patikrinkite trūkstamus stulpelius, apskaičiuokite vidurkį / medianą, išsaugokite vertę, pakeiskite mutate () Žinote vidutinės vertės reikšmę Daugiau vykdymo laiko. Su dideliu duomenų rinkiniu gali būti lėtas
Greitas būdas su sapply Norėdami automatiškai ieškoti ir pakeisti trūkstamas reikšmes vidurkiu / mediana, naudokite sapply () ir data.frame () Trumpas kodas ir greitai Nežinau imputacijos verčių

Įdomios straipsniai...