Ako nahradiť chýbajúce hodnoty (NA) v R: na.omit & na.rm

Obsah:

Anonim

Chýbajúce hodnoty v oblasti dátovej vedy vznikajú, keď chýba pozorovanie v stĺpci dátového rámca alebo obsahuje namiesto numerickej hodnoty znakovú hodnotu. Chýbajúce hodnoty musia byť vypustené alebo nahradené, aby sa z údajov dalo vyvodiť správny záver.

V tomto tutoriále sa naučíme, ako riešiť chýbajúce hodnoty pomocou knižnice dplyr. Knižnica dplyr je súčasťou ekosystému na vykonávanie analýzy údajov.

V tomto návode sa naučíte

  • mutovať()
  • Vylúčiť chýbajúce hodnoty (NA)
  • Imputované chýbajúce hodnoty (NA) so strednou hodnotou a strednou hodnotou

mutovať()

Štvrté sloveso v knižnici dplyr je užitočné na vytvorenie novej premennej alebo na zmenu hodnôt existujúcej premennej.

Budeme postupovať v dvoch častiach. Dozvieme sa, ako:

  • vylúčiť chýbajúce hodnoty z dátového rámca
  • spočítať chýbajúce hodnoty strednou hodnotou a strednou hodnotou

Sloveso mutate () sa používa veľmi ľahko. Podľa tejto syntaxe môžeme vytvoriť novú premennú:

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

Vylúčiť chýbajúce hodnoty (NA)

Metóda na.omit () z knižnice dplyr je jednoduchý spôsob, ako vylúčiť chýbajúce pozorovanie. Vypustenie všetkých NA z údajov je jednoduché, ale to neznamená, že ide o najelegantnejšie riešenie. Počas analýzy je rozumné používať rôzne metódy na riešenie chýbajúcich hodnôt

Na riešenie problému chýbajúcich pozorovaní použijeme titánsky súbor údajov. V tomto súbore údajov máme prístup k informáciám o cestujúcich na palube počas tragédie. Tento súbor údajov obsahuje veľa NA, o ktoré je potrebné sa starať.

Nahráme súbor csv z internetu a potom skontrolujeme, ktoré stĺpce majú NA. Na vrátenie stĺpcov s chýbajúcimi údajmi môžeme použiť nasledujúci kód:

Nahrajme údaje a overme chýbajúce údaje.

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

Výkon:

## [1] "age" "fare"

Tu,

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

Uvádza názov stĺpcov, ktoré neobsahujú údaje.

V stĺpcoch vek a cestovné majú chýbajúce hodnoty.

Môžeme ich zahodiť pomocou na.omit ().

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

Výkon:

## [1] 1045 13

Nový súbor údajov obsahuje 1045 riadkov v porovnaní s 1309 s pôvodným súborom údajov.

Vypočítajte chýbajúce údaje pomocou priemeru a mediánu

Mohli by sme tiež vypočítať (vyplniť) chýbajúce hodnoty pomocou mediánu alebo priemeru. Dobrým postupom je vytvoriť dve samostatné premenné pre strednú hodnotu a strednú hodnotu. Po vytvorení môžeme chýbajúce hodnoty nahradiť novovytvorenými premennými.

Použijeme metódu apply na výpočet priemeru stĺpca s NA. Pozrime sa na príklad

Krok 1) Na začiatku tohto tutoriálu sme uložili názov stĺpcov s chýbajúcimi hodnotami do zoznamu s názvom list_na. Tento zoznam použijeme

Krok 2) Teraz musíme vypočítať priemer s argumentom na.rm = TRUE. Tento argument je povinný, pretože v stĺpcoch chýbajú údaje, čo znamená, že R ich má ignorovať.

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

Vysvetlenie kódu:

V metóde apply odovzdáme 4 argumenty.

  • df: df_titanic [, colnames (df_titanic)% v% list_na]. Tento kód vráti názov stĺpcov z objektu list_na (tj. „Vek“ a „cestovné“)
  • 2: Vypočítajte funkciu na stĺpcoch
  • priemer: Vypočítajte priemer
  • na.rm = TRUE: Ignorujte chýbajúce hodnoty

Výkon:

## age fare## 29.88113 33.29548

Úspešne sme vytvorili priemer stĺpcov obsahujúcich chýbajúce pozorovania. Tieto dve hodnoty sa použijú na nahradenie chýbajúcich pozorovaní.

Krok 3) Vymeňte NA hodnoty

Sloveso mutovať z knižnice dplyr je užitočné pri vytváraní novej premennej. Nechceme nevyhnutne meniť pôvodný stĺpec, aby sme mohli vytvoriť novú premennú bez NA. mutácia je ľahko použiteľná, stačí zvoliť názov premennej a definovať, ako ju vytvoriť. Tu je celý kód

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

Vysvetlenie kódu:

Vytvoríme dve premenné, replace_mean_age a replace_mean_fare nasledovne:

  • replace_mean_age = ifelse (is.na (age), average_missing [1], age)
  • replace_mean_fare = ifelse (is.na (fare), average_missing [2], fare)

Ak má vek stĺpca chýbajúce hodnoty, potom ho nahraďte prvým prvkom average_missing (stredný vek), inak si ponechajte pôvodné hodnoty. Rovnaká logika pre cestovné

sum(is.na(df_titanic_replace$age))

Výkon:

## [1] 263

Vykonajte výmenu

sum(is.na(df_titanic_replace$replace_mean_age))

Výkon:

## [1] 0 

Pôvodný vek stĺpca má 263 chýbajúcich hodnôt, zatiaľ čo novo vytvorená premenná ich nahradila stredom premennej vek.

Krok 4) Chýbajúce pozorovania môžeme nahradiť aj mediánom.

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)

Výkon:

Krok 5) Sada veľkých údajov môže mať veľa chýbajúcich hodnôt a vyššie uvedená metóda môže byť ťažkopádna. Všetky vyššie uvedené kroky môžeme vykonať v jednom riadku kódu pomocou metódy sapply (). Aj keď by sme nepoznali stredné a stredné hodnoty.

sapply nevytvára dátový rámec, takže môžeme zabaliť funkciu sapply () do data.frame (), aby sme vytvorili objekt dátového rámca.

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

Zhrnutie

Chýbajúce hodnoty máme k dispozícii tromi spôsobmi:

  • Vylúčte všetky chýbajúce poznámky
  • Imputovať so strednou hodnotou
  • Impúzia s mediánom

V nasledujúcej tabuľke je zhrnuté, ako odstrániť všetky chýbajúce pozorovania

Knižnica Cieľ Zákonníka
základňa Uveďte chýbajúce pozorovania
colnames(df)[apply(df, 2, anyNA)]
dplyr Odstráňte všetky chýbajúce hodnoty
na.omit(df)

Imputáciu stredom alebo stredom je možné vykonať dvoma spôsobmi

  • Pomocou aplikácie
  • Pomocou sapply
Metóda Detaily Výhody Nevýhody
Krok za krokom s aplikáciou Skontrolujte stĺpce, ktoré chýbajú, vypočítajte strednú / strednú hodnotu, uložte hodnotu, nahraďte výrazom mutate () Poznáte hodnotu prostriedkov / medián Viac času na vykonanie. S veľkým súborom údajov to môže byť pomalé
Rýchly spôsob sapply Použite sapply () a data.frame () na automatické vyhľadávanie a nahradenie chýbajúcich hodnôt priemerom / stredom Krátky kód a rýchly Nepoznám imputačné hodnoty