Menghapus dan Mengganti Nilai NA
Terapkan na.omit(), complete.cases(), dan strategi penggantian manual.
Menghapus dan Mengganti Nilai NA adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Strategi Menangani NA
Ada tiga strategi utama untuk menangani nilai yang hilang: menghapusnya, menggantinya dengan konstanta, atau melakukan imputasi menggunakan perkiraan statistik. Pendekatan yang tepat bergantung pada data dan tujuan analisis Anda.
data_vals <- c(88, NA, 72, NA, 91, 65, NA, 78)
cat('Original data:', data_vals, '
')
cat('NA count:', sum(is.na(data_vals)), '
')
# Strategy 1: remove
cat('After removal:', data_vals[!is.na(data_vals)], '
')
# Strategy 2: replace with 0
replaced <- data_vals; replaced[is.na(replaced)] <- 0
cat('Replaced with 0:', replaced, '
')Menghapus NA dengan x[!is.na(x)]
Cara paling langsung untuk menghapus NA dari vektor adalah menggunakan subset logical: x[!is.na(x)]. Cara ini hanya mempertahankan elemen yang nilai is.na(x)-nya FALSE (yaitu, nilai yang ada).
response_times <- c(1.2, NA, 0.9, 1.5, NA, 1.1, 0.8, NA, 1.3)
cat('With NAs: ', response_times, '
')
cat('Length:', length(response_times), '
')
clean_times <- response_times[!is.na(response_times)]
cat('Without NAs: ', clean_times, '
')
cat('Length:', length(clean_times), '
')
cat('Mean after removal:', round(mean(clean_times), 3), '
')na.omit() untuk Vektor
na.omit(x) menghapus nilai NA dari vektor. Fungsinya setara dengan x[!is.na(x)], tetapi juga menyimpan posisi NA yang dihapus dalam atribut bernama 'na.action'.
scores <- c(88, NA, 72, NA, 91, 65, NA, 78)
clean_scores <- na.omit(scores)
cat('Original:', scores, '
')
cat('Cleaned: ', as.numeric(clean_scores), '
')
# na.omit records which positions were removed
removed_at <- attr(clean_scores, 'na.action')
cat('NAs were at positions:', removed_at, '
')na.omit() untuk Data Frame
Saat diterapkan pada data frame, na.omit(df) menghapus setiap baris yang memiliki setidaknya satu NA. Proses ini disebut penghapusan berdasarkan baris—seluruh observasi dihapus.
df <- data.frame(
name = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
age = c(28, NA, 32, 45, 29),
salary = c(55000, 72000, NA, 90000, 61000)
)
cat('Original rows:', nrow(df), '
')
df_clean <- na.omit(df)
cat('After na.omit rows:', nrow(df_clean), '
')
print(df_clean)complete.cases() — Kelengkapan per Baris
complete.cases(df) mengembalikan vektor logical dengan TRUE untuk baris yang tidak memiliki nilai yang hilang. Gunakan fungsi ini untuk menyaring baris lengkap atau mengidentifikasi baris yang tidak lengkap.
df <- data.frame(
id = 1:5,
x = c(1, NA, 3, 4, NA),
y = c(NA, 2, 3, NA, 5)
)
cc <- complete.cases(df)
cat('Complete cases (T/F):', cc, '
')
cat('Complete rows:
')
print(df[cc, ])
cat('Number complete:', sum(cc), '
')Mengganti NA dengan Konstanta
Untuk mengganti NA dengan nilai tertentu, gunakan penetapan logical: x[is.na(x)] <- value. Penggantian yang umum meliputi 0 untuk hitungan, mean/median untuk data kontinu, atau label kategori untuk faktor.
# Replace with 0
counts <- c(5, NA, 3, NA, 8, 1, NA, 4)
counts_filled <- counts
counts_filled[is.na(counts_filled)] <- 0
cat('Original:', counts, '
')
cat('Filled: ', counts_filled, '
')
# Replace with mean of present values
mean_val <- mean(counts, na.rm = TRUE)
counts_mean <- counts
counts_mean[is.na(counts_mean)] <- mean_val
cat('Mean-filled:', round(counts_mean, 1), '
')replace() — Penggantian Fungsional
replace(x, list, values) mengembalikan salinan x yang telah diubah; elemen pada posisi list diganti dengan values. Ini adalah pendekatan fungsional (tanpa mengubah objek asli) untuk melakukan penggantian.
temps <- c(22.1, NA, 19.8, NA, 25.1)
cat('Original:', temps, '
')
# Replace NAs with the median
median_temp <- median(temps, na.rm = TRUE)
filled_temps <- replace(temps, is.na(temps), median_temp)
cat('Filled: ', filled_temps, '
')
cat('Original unchanged:', temps, '
') # original not modifiedPengisian Maju (Last Observation Carried Forward)
Salah satu strategi imputasi yang umum adalah pengisian maju (LOCF): mengganti setiap NA dengan nilai terakhir yang diketahui. Strategi ini digunakan untuk data deret waktu ketika pengukuran tetap berlaku hingga diperbarui.
# Manual forward-fill
readings <- c(10, NA, NA, 13, NA, 15, NA, NA, 18)
filled <- readings
for (i in seq_along(filled)) {
if (is.na(filled[i]) && i > 1) {
filled[i] <- filled[i - 1]
}
}
cat('Original: ', readings, '
')
cat('Forward-filled:', filled, '
')Mengganti NA dalam Vektor Karakter
Teknik yang sama berlaku untuk vektor karakter. Dalam analisis data kategorikal, NA dalam string sering diganti dengan label seperti 'Unknown' atau 'Missing'.
categories <- c('A', NA, 'B', 'A', NA, 'C', NA, 'B')
cat('Original:', categories, '
')
# Replace with 'Unknown'
filled_cat <- replace(categories, is.na(categories), 'Unknown')
cat('Filled: ', filled_cat, '
')
# Count each category
cat('Table:
')
print(table(filled_cat))Strategi Penggantian Bersyarat
Terkadang Anda ingin menggunakan nilai pengganti yang berbeda berdasarkan nilai kolom lain. Gunakan pengindeksan dengan kondisi untuk menerapkan penggantian yang terarah.
# Scores: replace NA with group mean
group <- c('A', 'A', 'B', 'B', 'A', 'B')
scores <- c(85, NA, 72, NA, 90, 78)
mean_a <- mean(scores[group == 'A'], na.rm = TRUE)
mean_b <- mean(scores[group == 'B'], na.rm = TRUE)
imputed <- scores
imputed[is.na(imputed) & group == 'A'] <- mean_a
imputed[is.na(imputed) & group == 'B'] <- mean_b
cat('Original:', scores, '
')
cat('Imputed: ', imputed, '
')Ringkasan Metode Penghapusan NA
Ringkasan alat penanganan NA dalam R:
x[!is.na(x)]— menghapus NA dari vektorna.omit(x)— menghapus NA (sekaligus mencatat posisinya)na.omit(df)— menghapus baris yang tidak lengkap dari data framecomplete.cases(df)— vektor logical: TRUE untuk baris lengkapx[is.na(x)] <- val— mengganti NA secara langsungreplace(x, is.na(x), val)— penggantian fungsional (mengembalikan salinan)
v <- c(5, NA, 8, NA, 3, 7)
cat('Remove: ', v[!is.na(v)], '
')
cat('Replace with 0: ', replace(v, is.na(v), 0), '
')
cat('Replace with mean:', replace(v, is.na(v), mean(v, na.rm=TRUE)), '
')Pemeriksaan Singkat
Apa hasil dari na.omit(c(1, NA, 3, NA, 5))?
Ringkasan: Menghapus dan Mengganti NA
Kerja bagus! Hal-hal penting dari pelajaran ini:
x[!is.na(x)]danna.omit(x)menghapus NA dari vektorna.omit(df)melakukan penghapusan berdasarkan baris (menghapus setiap baris yang memiliki NA)complete.cases(df)mengidentifikasi baris tanpa nilai yang hilangx[is.na(x)] <- valuemengganti NA secara langsungreplace(x, is.na(x), value)mengembalikan salinan yang telah diubah tanpa mengubah objek asli- Pilih strategi berdasarkan alasan data hilang dan jumlah data yang hilang
# Complete workflow: audit, then handle
data_raw <- c(82, NA, 75, NA, 91, 68, NA, 79)
cat('Missing:', sum(is.na(data_raw)), '/', length(data_raw), '
')
# Replace with median (robust to outliers)
imputed <- replace(data_raw, is.na(data_raw), median(data_raw, na.rm=TRUE))
cat('Before imputation mean:', round(mean(data_raw, na.rm=TRUE), 2), '
')
cat('After imputation mean: ', round(mean(imputed), 2), '
')Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menghapus dan Mengganti Nilai NA” gratis?
Ya — teks lengkap “Menghapus dan Mengganti Nilai NA” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menghapus dan Mengganti Nilai NA”?
Terapkan na.omit(), complete.cases(), dan strategi penggantian manual. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Menghapus dan Mengganti Nilai NA” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Memahami NA dalam R
- Mendeteksi dan Menghitung Nilai yang Hilang
- Menghapus dan Mengganti Nilai NA
- NA dalam Perhitungan dan Agregasi