Як замінити відсутні значення (NA) у R: na.omit & na.rm

Зміст:

Anonim

Відсутні значення в науці про дані виникають, коли спостереження відсутнє у стовпці кадру даних або містить значення символу замість числового значення. Відсутні значення потрібно скинути або замінити, щоб зробити правильний висновок з даних.

У цьому підручнику ми дізнаємося, як боротися з відсутніми значеннями за допомогою бібліотеки dplyr. dplyr бібліотека є частиною екосистеми для здійснення аналізу даних.

У цьому підручнику ви дізнаєтесь

  • мутувати ()
  • Виключити відсутні значення (NA)
  • Враховуйте відсутні значення (NA) із середнім значенням та медіаною

мутувати ()

Четверте дієслово в бібліотеці dplyr корисно створити нову змінну або змінити значення існуючої змінної.

Ми продовжимо з двох частин. Ми дізнаємось, як:

  • виключити відсутні значення з кадру даних
  • віднести відсутні значення до середнього та медіани

Дієслово mutate () дуже просте у використанні. Ми можемо створити нову змінну, дотримуючись цього синтаксису:

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

Виключити відсутні значення (NA)

Метод na.omit () з бібліотеки dplyr - простий спосіб виключити відсутні спостереження. Видалити всі НС з даних легко, але це не означає, що це найелегантніше рішення. Під час аналізу доцільно використовувати різноманітні методи боротьби з відсутніми значеннями

Для вирішення проблеми відсутніх спостережень ми будемо використовувати титанічний набір даних. У цьому наборі даних ми маємо доступ до інформації про пасажирів на борту під час трагедії. Цей набір даних містить багато НС, про які потрібно піклуватися.

Ми завантажимо файл csv з Інтернету, а потім перевіримо, у яких стовпцях є NA. Щоб повернути стовпці з відсутніми даними, ми можемо використати такий код:

Давайте завантажимо дані та перевіримо відсутні дані.

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

Вихід:

## [1] "age" "fare"

Ось,

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

Дає назву стовпців, які не мають даних.

У стовпцях вік та вартість проїзду відсутні значення.

Ми можемо скинути їх за допомогою na.omit ().

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

Вихід:

## [1] 1045 13

Новий набір даних містить 1045 рядків порівняно з 1309 з оригінальним набором даних.

Обчислення відсутніх даних із середнім та середнім значенням

Ми також могли б зарахувати (заповнити) відсутні значення з медіаною або середнім значенням. Хорошою практикою є створення двох окремих змінних для середнього та медіани. Після створення ми можемо замінити відсутні значення на новостворені змінні.

Ми використаємо метод apply для обчислення середнього значення стовпця з NA. Подивимось приклад

Крок 1) Раніше в підручнику ми зберігали ім'я стовпців із відсутніми значеннями у списку, що називається list_na. Ми використаємо цей список

Крок 2) Тепер нам потрібно обчислити середнє з аргументом na.rm = TRUE. Цей аргумент є обов'язковим, оскільки в стовпцях відсутні дані, і це говорить R, щоб їх ігнорував.

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

Пояснення коду:

Ми передаємо 4 аргументи в методі apply.

  • df: df_titanic [, colnames (df_titanic)% у% list_na]. Цей код поверне ім'я стовпців з об'єкта list_na (тобто "вік" та "тариф")
  • 2: Обчисліть функцію на стовпцях
  • mean: Обчислити середнє
  • na.rm = TRUE: Ігнорувати відсутні значення

Вихід:

## age fare## 29.88113 33.29548

Ми успішно створили середнє значення стовпців, що містять відсутні спостереження. Ці два значення будуть використані для заміщення відсутніх спостережень.

Крок 3) Замініть значення NA

Мутація дієслова з бібліотеки dplyr корисна при створенні нової змінної. Ми не обов'язково хочемо змінювати вихідний стовпець, щоб ми могли створити нову змінну без NA. mutate простий у використанні, ми просто вибираємо ім'я змінної та визначаємо, як створити цю змінну. Ось повний код

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

Пояснення коду:

Ми створюємо дві змінні, replace_mean_age і replace_mean_fare наступним чином:

  • replace_mean_age = ifelse (is.na (вік), середнє_відсутнє [1], вік)
  • replace_mean_fare = ifelse (is.na (тариф), середнє_відсутність [2], тариф)

Якщо у віці стовпця відсутні значення, замініть його першим елементом середнє_немає (середнє віку), інакше збережіть вихідні значення. Та сама логіка щодо тарифу

sum(is.na(df_titanic_replace$age))

Вихід:

## [1] 263

Виконайте заміну

sum(is.na(df_titanic_replace$replace_mean_age))

Вихід:

## [1] 0 

Оригінальний вік стовпця містить 263 відсутні значення, тоді як новостворена змінна замінила їх середнім значенням змінної age.

Крок 4) Ми також можемо замінити відсутні спостереження медіаною.

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)

Вихід:

Крок 5) Великий набір даних може мати багато відсутніх значень, і вищезазначений метод може бути громіздким. Ми можемо виконати всі наведені вище кроки в одному рядку коду, використовуючи метод sapply (). Хоча ми не знали б долин середньої та середньої величини.

sapply не створює фрейм даних, тому ми можемо обернути функцію sapply () всередині data.frame (), щоб створити об'єкт кадру даних.

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

Резюме

У нас є три методи боротьби з відсутніми значеннями:

  • Виключіть усі відсутні спостереження
  • Обчислення середнього
  • Обчислення медіани

Наступна таблиця підсумовує, як видалити всі відсутні спостереження

Бібліотека Об’єктивна Код
база Перелічіть відсутні спостереження
colnames(df)[apply(df, 2, anyNA)]
dplyr Видаліть усі відсутні значення
na.omit(df)

Імпутація середнього значення або медіани може бути здійснена двома способами

  • Використовуючи застосувати
  • Використання sapply
Метод Деталі Переваги Недоліки
Крок за кроком із застосуванням Перевірте стовпці з відсутніми, обчисліть середнє / медіана, збережіть значення, замініть на mutate () Ви знаєте значення засобів / медіана Більше часу на виконання. Може бути повільним з великим набором даних
Швидкий шлях з використанням Використовуйте sapply () та data.frame () для автоматичного пошуку та заміни відсутніх значень середнім значенням / медіаною Короткий код і швидко Не знаю значень обчислення