Cara Mengganti Missing Values ​​(NA) di R: na.omit & na.rm

Daftar Isi:

Anonim

Nilai yang hilang dalam ilmu data muncul saat observasi hilang dalam kolom bingkai data atau berisi nilai karakter, bukan nilai numerik. Nilai yang hilang harus dihilangkan atau diganti untuk menarik kesimpulan yang benar dari data.

Dalam tutorial ini, kita akan belajar bagaimana menangani nilai yang hilang dengan pustaka dplyr. Perpustakaan dplyr merupakan bagian dari ekosistem untuk mewujudkan analisis data.

Dalam tutorial ini, Anda akan belajar

  • mengubah()
  • Kecualikan Missing Values ​​(NA)
  • Hitung Nilai Hilang (NA) dengan Mean dan Median

mengubah()

Kata kerja keempat di pustaka dplyr berguna untuk membuat variabel baru atau mengubah nilai variabel yang sudah ada.

Kami akan melanjutkan dalam dua bagian. Kami akan belajar cara:

  • mengecualikan nilai yang hilang dari bingkai data
  • menghubungkan nilai-nilai yang hilang dengan mean dan median

Kata kerja mutate () sangat mudah digunakan. Kita dapat membuat variabel baru mengikuti sintaks ini:

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

Kecualikan Missing Values ​​(NA)

Metode na.omit () dari pustaka dplyr adalah cara sederhana untuk mengecualikan observasi yang hilang. Menghapus semua NA dari data itu mudah, tetapi itu tidak berarti itu adalah solusi yang paling elegan. Selama analisis, sebaiknya gunakan berbagai metode untuk menangani nilai yang hilang

Untuk mengatasi masalah observasi yang hilang, kami akan menggunakan dataset titanic. Dalam kumpulan data ini, kami memiliki akses ke informasi penumpang di pesawat selama tragedi tersebut. Dataset ini memiliki banyak NA yang perlu dijaga.

Kami akan mengunggah file csv dari internet dan kemudian memeriksa kolom mana yang memiliki NA. Untuk mengembalikan kolom dengan data yang hilang, kita dapat menggunakan kode berikut:

Mari unggah data dan verifikasi data yang hilang.

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

Keluaran:

## [1] "age" "fare"

Sini,

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

Memberikan nama kolom yang tidak memiliki data.

Kolom usia dan tarif memiliki nilai yang hilang.

Kita bisa menjatuhkannya dengan na.omit ().

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

Keluaran:

## [1] 1045 13

Dataset baru berisi 1.045 baris dibandingkan dengan 1309 dengan set data asli.

Hubungkan data yang Hilang dengan Mean dan Median

Kita juga bisa menghubungkan (mengisi) nilai yang hilang dengan median atau mean. Praktik yang baik adalah membuat dua variabel terpisah untuk mean dan median. Setelah dibuat, kita dapat mengganti nilai yang hilang dengan variabel yang baru dibentuk.

Kami akan menggunakan metode terapan untuk menghitung rata-rata kolom dengan NA. Mari kita lihat contohnya

Langkah 1) Sebelumnya di tutorial, kami menyimpan nama kolom dengan nilai yang hilang dalam daftar yang disebut list_na. Kami akan menggunakan daftar ini

Langkah 2) Sekarang kita perlu menghitung mean dengan argumen na.rm = TRUE. Argumen ini wajib karena kolom memiliki data yang hilang, dan ini memberitahu R untuk mengabaikannya.

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

Penjelasan Kode:

Kami memberikan 4 argumen dalam metode terapkan.

  • df: df_titanic [, nama kolom (df_titanic)% dalam% list_na]. Kode ini akan mengembalikan nama kolom dari objek list_na (yaitu "usia" dan "tarif")
  • 2: Hitung fungsi pada kolom
  • mean: Hitung mean
  • na.rm = TRUE: Abaikan nilai yang hilang

Keluaran:

## age fare## 29.88113 33.29548

Kami berhasil membuat rata-rata kolom yang berisi observasi yang hilang. Kedua nilai ini akan digunakan untuk menggantikan observasi yang hilang.

Langkah 3) Ganti Nilai NA

Kata kerja bermutasi dari pustaka dplyr berguna dalam membuat variabel baru. Kami tidak perlu mengubah kolom asli sehingga kami dapat membuat variabel baru tanpa NA. mutate mudah digunakan, kita tinggal memilih nama variabel dan menentukan cara membuat variabel ini. Ini kode lengkapnya

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

Penjelasan Kode:

Kami membuat dua variabel, replace_mean_age dan replace_mean_fare sebagai berikut:

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

Jika usia kolom memiliki nilai yang hilang, ganti dengan elemen pertama average_missing (mean of age), jika tidak, pertahankan nilai aslinya. Logika yang sama untuk ongkos

sum(is.na(df_titanic_replace$age))

Keluaran:

## [1] 263

Lakukan penggantian

sum(is.na(df_titanic_replace$replace_mean_age))

Keluaran:

## [1] 0 

Usia kolom asli memiliki 263 nilai yang hilang sementara variabel yang baru dibuat menggantikannya dengan mean dari variabel usia.

Langkah 4) Kita juga bisa mengganti observasi yang hilang dengan 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)

Keluaran:

Langkah 5) Kumpulan data yang besar dapat memiliki banyak nilai yang hilang dan metode di atas bisa merepotkan. Kita dapat menjalankan semua langkah di atas dalam satu baris kode menggunakan metode sapply (). Meskipun kita tidak akan mengetahui nilai mean dan median.

sapply tidak membuat bingkai data, jadi kita bisa membungkus fungsi sapply () di dalam data.frame () untuk membuat objek bingkai data.

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

Ringkasan

Kami memiliki tiga metode untuk menangani nilai yang hilang:

  • Kecualikan semua pengamatan yang hilang
  • Hitung dengan maksud
  • Hubungkan dengan median

Tabel berikut ini merangkum cara menghapus semua observasi yang hilang

Perpustakaan Objektif Kode
mendasarkan Buat daftar observasi yang hilang
colnames(df)[apply(df, 2, anyNA)]
dplyr Hapus semua nilai yang hilang
na.omit(df)

Imputasi dengan mean atau median dapat dilakukan dengan dua cara

  • Menggunakan terapkan
  • Menggunakan sapply
metode Detail Keuntungan Kekurangan
Langkah demi langkah dengan menerapkan Periksa kolom yang tidak ada, hitung mean / median, simpan nilainya, ganti dengan mutate () Anda tahu nilai mean / median Lebih banyak waktu eksekusi. Bisa lambat dengan dataset besar
Cara cepat dengan sapply Gunakan sapply () dan data.frame () untuk secara otomatis mencari dan mengganti nilai yang hilang dengan mean / median Kode pendek dan cepat Tidak tahu nilai imputasi