Jak zastąpić brakujące wartości (NA) w R: na.omit & na.rm

Spisie treści:

Anonim

Brakujące wartości w nauce o danych pojawiają się, gdy brakuje obserwacji w kolumnie ramki danych lub zawiera ona wartość znakową zamiast wartości liczbowej. Brakujące wartości należy usunąć lub zastąpić, aby wyciągnąć prawidłowe wnioski z danych.

W tym samouczku nauczymy się, jak radzić sobie z brakującymi wartościami w bibliotece dplyr. Biblioteka dplyr jest częścią ekosystemu do przeprowadzania analizy danych.

W tym samouczku dowiesz się

  • zmutować()
  • Wyklucz brakujące wartości (NA)
  • Podaj brakujące wartości (NA) wraz ze średnią i medianą

zmutować()

Czwarty czasownik w bibliotece dplyr jest pomocny przy tworzeniu nowej zmiennej lub zmianie wartości istniejącej zmiennej.

Będziemy postępować w dwóch częściach. Dowiemy się, jak:

  • wyklucz brakujące wartości z ramki danych
  • imputuj brakujące wartości ze średnią i medianą

Czasownik mutate () jest bardzo łatwy w użyciu. Możemy utworzyć nową zmienną zgodnie z następującą składnią:

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

Wyklucz brakujące wartości (NA)

Metoda na.omit () z biblioteki dplyr to prosty sposób na wykluczenie brakujących obserwacji. Usunięcie całej NA z danych jest łatwe, ale nie oznacza to, że jest to najbardziej eleganckie rozwiązanie. Podczas analizy dobrze jest stosować różne metody radzenia sobie z brakującymi wartościami

Aby rozwiązać problem brakujących obserwacji, użyjemy zbioru danych Titanic. W tym zbiorze danych mamy dostęp do informacji o pasażerach na pokładzie podczas tragedii. Ten zestaw danych zawiera wiele NA, którymi należy się zająć.

Prześlemy plik csv z internetu, a następnie sprawdzimy, które kolumny mają NA. Aby zwrócić kolumny z brakującymi danymi, możemy użyć następującego kodu:

Prześlijmy dane i zweryfikujmy brakujące dane.

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

Wynik:

## [1] "age" "fare"

Tutaj,

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

Podaje nazwy kolumn, które nie zawierają danych.

W kolumnach wiek i taryfa brakuje wartości.

Możemy je upuścić za pomocą na.omit ().

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

Wynik:

## [1] 1045 13

Nowy zestaw danych zawiera 1045 wierszy w porównaniu do 1309 z oryginalnym zestawem danych.

Wpisz brakujące dane za pomocą średniej i mediany

Moglibyśmy również przypisać (uzupełnić) brakujące wartości za pomocą mediany lub średniej. Dobrą praktyką jest utworzenie dwóch oddzielnych zmiennych dla średniej i mediany. Po utworzeniu możemy zastąpić brakujące wartości nowo utworzonymi zmiennymi.

Użyjemy metody Apply do obliczenia średniej kolumny z NA. Zobaczmy przykład

Krok 1) Wcześniej w samouczku zapisaliśmy nazwy kolumn z brakującymi wartościami na liście o nazwie list_na. Użyjemy tej listy

Krok 2) Teraz musimy obliczyć średnią z argumentem na.rm = TRUE. Ten argument jest obowiązkowy, ponieważ w kolumnach brakuje danych, a to mówi R, aby je zignorował.

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

Objaśnienie kodu:

W metodzie apply przekazujemy 4 argumenty.

  • df: df_titanic [, colnames (df_titanic)% w% list_na]. Ten kod zwróci nazwę kolumny z obiektu list_na (tj. „Wiek” i „opłata”)
  • 2: Oblicz funkcję w kolumnach
  • mean: Oblicz średnią
  • na.rm = TRUE: Ignoruj ​​brakujące wartości

Wynik:

## age fare## 29.88113 33.29548

Z powodzeniem utworzyliśmy średnią z kolumn zawierających brakujące obserwacje. Te dwie wartości zostaną użyte do zastąpienia brakujących obserwacji.

Krok 3) Zastąp wartości NA

Mutacja czasownika z biblioteki dplyr jest przydatna przy tworzeniu nowej zmiennej. Niekoniecznie chcemy zmieniać oryginalną kolumnę, abyśmy mogli stworzyć nową zmienną bez NA. mutate jest łatwy w użyciu, po prostu wybieramy nazwę zmiennej i definiujemy sposób jej utworzenia. Oto pełny kod

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

Objaśnienie kodu:

Tworzymy dwie zmienne, replace_mean_age i replace_mean_fare w następujący sposób:

  • replace_mean_age = ifelse (is.na (wiek), średni_ brakujący [1], wiek)
  • replace_mean_fare = ifelse (is.na (taryfa), średni_ brakujący [2], taryfa)

Jeśli wiek kolumny ma brakujące wartości, zamień na pierwszy element średnia_brak (średnia wieku), w przeciwnym razie zachowaj oryginalne wartości. Ta sama logika dla taryfy

sum(is.na(df_titanic_replace$age))

Wynik:

## [1] 263

Przeprowadź wymianę

sum(is.na(df_titanic_replace$replace_mean_age))

Wynik:

## [1] 0 

W pierwotnym wieku kolumny brakowało 263 wartości, podczas gdy nowo utworzona zmienna zastąpiła je średnią wieku zmiennej.

Krok 4) Możemy również zastąpić brakujące obserwacje medianą.

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)

Wynik:

Krok 5) Duży zbiór danych może zawierać wiele brakujących wartości, a powyższa metoda może być kłopotliwa. Możemy wykonać wszystkie powyższe kroki w jednej linii kodu za pomocą metody sapply (). Chociaż nie znalibyśmy wartości średniej i mediany.

sapply nie tworzy ramki danych, więc możemy zawinąć funkcję sapply () wewnątrz data.frame (), aby utworzyć obiekt ramki danych.

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

Podsumowanie

Mamy trzy metody radzenia sobie z brakującymi wartościami:

  • Wyklucz wszystkie brakujące obserwacje
  • Poczytaj o średniej
  • Przypisać medianie

W poniższej tabeli podsumowano, jak usunąć wszystkie brakujące obserwacje

Biblioteka Cel Kod
baza Wymień brakujące obserwacje
colnames(df)[apply(df, 2, anyNA)]
dplyr Usuń wszystkie brakujące wartości
na.omit(df)

Imputację za pomocą średniej lub mediany można przeprowadzić na dwa sposoby

  • Korzystanie z aplikacji
  • Używanie sapply
metoda Detale Zalety Niedogodności
Krok po kroku z aplikacją Sprawdź kolumny z brakującymi danymi, oblicz średnią / medianę, zapisz wartość, zamień na mutate () Znasz wartość średnich / mediany Dłuższy czas realizacji. Może działać wolno w przypadku dużego zbioru danych
Szybki sposób z mlekiem Użyj sapply () i data.frame (), aby automatycznie wyszukać i zastąpić brakujące wartości średnią / medianą Krótki kod i szybko Nie znam wartości imputacji