Fundamental Series — Part 10 of 20
Data dunia nyata hampir selalu punya missing values. Memahami bagaimana R memperlakukan NA sangat penting — karena NA bisa “menular” ke seluruh perhitungan.
Apa itu NA?
x <- NA
class(x) # "logical"
is.na(x) # TRUE
# NA punya tipe
NA_real_ # NA numerik
NA_integer_ # NA integer
NA_character_ # NA string
NA_complex_ # NA complexDeteksi Missing
x <- c(1, NA, 3, NA, 5)
is.na(x) # FALSE TRUE FALSE TRUE FALSE
!is.na(x) # TRUE FALSE TRUE FALSE TRUE
sum(is.na(x)) # 2
any(is.na(x)) # TRUEDalam DataFrame
library(dplyr)
df <- data.frame(
nama = c("A", "B", "C", "D"),
nilai = c(80, NA, 70, NA),
umur = c(20, 21, NA, 22)
)
# Hitung NA per kolom
colSums(is.na(df))
# nama: 0, nilai: 2, umur: 1
# Baris mana yang punya NA?
complete.cases(df)
# TRUE FALSE FALSE FALSEFilter Missing
library(dplyr)
# Buang baris dengan NA di kolom tertentu
df |> filter(!is.na(nilai))
# Buang baris dengan NA di kolom mana saja
df |> na.omit()
df |> tidyr::drop_na()
# Buang NA hanya di kolom tertentu
df |> tidyr::drop_na(nilai)Mengisi Missing
library(dplyr)
library(tidyr)
# Isi dengan nilai tetap
df |> replace_na(list(nilai = 0, umur = 99))
# Isi dengan mean
df |> mutate(nilai = ifelse(is.na(nilai), mean(nilai, na.rm = TRUE), nilai))
# Isi dengan coalesce (ambil nilai non-NA pertama)
coalesce(NA, NA, 3, 5) # 3
# fill — isi ke bawah/atas (time series)
df |> fill(nilai, .direction = "down")NULL vs NA
# NULL = tidak ada / kosong
x <- NULL
length(x) # 0
is.null(x) # TRUE
# NA = ada tapi tidak diketahui
y <- NA
length(y) # 1
is.na(y) # TRUE
# NULL hilang di vector, NA tidak
c(1, NULL, 3) # c(1, 3)
c(1, NA, 3) # c(1, NA, 3)Latihan
BahayaLatihan 10.1 — Deteksi & Hitung
df <- data.frame(
id = 1:10,
x = c(5, NA, 3, NA, 7, 8, NA, 2, 9, NA),
y = c(NA, 10, NA, 20, 30, NA, 40, 50, NA, 60)
)
# 1. Berapa total NA di seluruh dataframe?
# 2. Kolom mana yang paling banyak NA?
# 3. Berapa persen baris yang complete (tanpa NA)?
BahayaLatihan 10.2 — Handle Missing
# Dari df di atas:
# 1. Buat df_complete: hanya baris tanpa NA
# 2. Buat df_filled: isi NA di x dengan mean(x), NA di y dengan median(y)
# 3. Bandingkan mean(x) di df_complete vs df_filledRingkasan
| Fungsi | Keterangan |
|---|---|
NA |
Nilai missing |
is.na(x) |
Cek NA |
na.rm = TRUE |
Abaikan NA di statistik |
complete.cases() |
Baris tanpa NA |
na.omit() / drop_na() |
Buang baris NA |
replace_na() |
Isi NA dengan nilai |
coalesce() |
Ambil non-NA pertama |
fill() |
Isi ke bawah/atas |
Sebelumnya: Part 9 — Date & Time Selanjutnya: Part 11 — Package & Library