Jak nahradit chybějící hodnoty (NA) v R: na.omit & na.rm

Obsah:

Anonim

Chybějící hodnoty ve vědě o datech vznikají, když ve sloupci datového rámce chybí pozorování nebo místo numerické hodnoty obsahuje hodnotu znaku. Chybějící hodnoty musí být zrušeny nebo nahrazeny, aby bylo možné z dat vyvodit správný závěr.

V tomto kurzu se naučíme, jak řešit chybějící hodnoty pomocí knihovny dplyr. Knihovna dplyr je součástí ekosystému k provádění analýzy dat.

V tomto výukovém programu se naučíte

  • mutovat()
  • Vyloučit chybějící hodnoty (NA)
  • Imputovat chybějící hodnoty (NA) se střední hodnotou a střední hodnotou

mutovat()

Čtvrté sloveso v knihovně dplyr je užitečné k vytvoření nové proměnné nebo ke změně hodnot existující proměnné.

Budeme postupovat ve dvou částech. Naučíme se, jak:

  • vyloučit chybějící hodnoty z datového rámce
  • započítat chybějící hodnoty průměrem a mediánem

Sloveso mutate () se velmi snadno používá. Můžeme vytvořit novou proměnnou podle této syntaxe:

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

Vyloučit chybějící hodnoty (NA)

Metoda na.omit () z knihovny dplyr je jednoduchý způsob, jak vyloučit chybějící pozorování. Vypuštění všech NA z dat je snadné, ale to neznamená, že je to nejelegantnější řešení. Během analýzy je rozumné použít různé metody řešení chybějících hodnot

K řešení problému chybějících pozorování použijeme titanový datový soubor. V tomto datovém souboru máme přístup k informacím cestujících na palubě během tragédie. Tato datová sada obsahuje mnoho NA, o které je třeba se starat.

Nahrajeme soubor csv z internetu a poté zkontrolujeme, které sloupce mají NA. K vrácení sloupců s chybějícími daty můžeme použít následující kód:

Nahrajme data a ověřte chybějící data.

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ýstup:

## [1] "age" "fare"

Tady,

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

Uvádí název sloupců, které neobsahují data.

Stáří sloupců a jízdné mají chybějící hodnoty.

Můžeme je zrušit pomocí na.omit ().

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

Výstup:

## [1] 1045 13

Nová datová sada obsahuje 1045 řádků ve srovnání s 1309 s původní datovou sadou.

Vypočítat chybějící data pomocí průměru a mediánu

Mohli bychom také započítat (naplnit) chybějící hodnoty mediánem nebo průměrem. Dobrým postupem je vytvoření dvou samostatných proměnných pro průměr a medián. Po vytvoření můžeme chybějící hodnoty nahradit nově vytvořenými proměnnými.

Pro výpočet průměru sloupce s NA použijeme metodu apply. Podívejme se na příklad

Krok 1) Dříve v tutoriálu jsme uložili název sloupců s chybějícími hodnotami do seznamu s názvem list_na. Tento seznam použijeme

Krok 2) Nyní musíme vypočítat průměr s argumentem na.rm = TRUE. Tento argument je povinný, protože ve sloupcích chybí data, a to říká R, aby je ignoroval.

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

Vysvětlení kódu:

V metodě apply předáme 4 argumenty.

  • df: df_titanic [, colnames (df_titanic)% v% list_na]. Tento kód vrátí název sloupců z objektu list_na (tj. „Age“ a „fare“)
  • 2: Vypočítat funkci na sloupcích
  • průměr: Vypočítá průměr
  • na.rm = TRUE: Chybí chybějící hodnoty

Výstup:

## age fare## 29.88113 33.29548

Úspěšně jsme vytvořili průměr sloupců obsahujících chybějící pozorování. Tyto dvě hodnoty budou použity k nahrazení chybějících pozorování.

Krok 3) Vyměňte NA hodnoty

Sloveso mutovat z knihovny dplyr je užitečné při vytváření nové proměnné. Nechceme nutně chtít změnit původní sloupec, abychom mohli vytvořit novou proměnnou bez NA. mutace se snadno používá, stačí zvolit název proměnné a definovat, jak tuto proměnnou vytvořit. Zde je kompletní 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))

Vysvětlení kódu:

Vytvoříme dvě proměnné, replace_mean_age a replace_mean_fare takto:

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

Pokud věk sloupce chybí hodnoty, nahraďte jej prvním prvkem average_missing (průměr věku), jinak zachovejte původní hodnoty. Stejná logika pro jízdné

sum(is.na(df_titanic_replace$age))

Výstup:

## [1] 263

Proveďte výměnu

sum(is.na(df_titanic_replace$replace_mean_age))

Výstup:

## [1] 0 

Původní stáří sloupce má 263 chybějících hodnot, zatímco nově vytvořená proměnná je nahradila průměrem stáří proměnné.

Krok 4) Můžeme také nahradit chybějící pozorování mediánem.

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ýstup:

Krok 5) Velká sada dat může mít spoustu chybějících hodnot a výše uvedená metoda může být těžkopádná. Všechny výše uvedené kroky můžeme provést v jednom řádku kódu pomocí metody sapply (). Ačkoli bychom neznali údolní hodnoty střední a střední.

sapply nevytváří datový rámec, takže můžeme funkci sapply () zabalit do data.frame () a vytvořit objekt datového rámce.

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

souhrn

Máme tři metody řešení chybějících hodnot:

  • Vyloučte všechna chybějící pozorování
  • Imputovat s průměrem
  • Imputovat s mediánem

Následující tabulka shrnuje, jak odstranit všechna chybějící pozorování

Knihovna Objektivní Kód
základna Seznam chybějících pozorování
colnames(df)[apply(df, 2, anyNA)]
dplyr Odstraňte všechny chybějící hodnoty
na.omit(df)

Imputaci průměrem nebo mediánem lze provést dvěma způsoby

  • Pomocí aplikace
  • Pomocí sapply
Metoda Detaily Výhody Nevýhody
Krok za krokem s aplikací Zkontrolovat chybějící sloupce, vypočítat průměr / medián, uložit hodnotu, nahradit mutate () Znáte hodnotu prostředků / medián Více času na provedení. Může být pomalý s velkým souborem dat
Rychlý způsob sapply Použijte sapply () a data.frame () k automatickému vyhledávání a nahrazení chybějících hodnot střední / střední hodnotou Krátký kód a rychlý Neznám imputační hodnoty