NA Değerlerini Kaldırma ve Değiştirme
na.omit(), complete.cases() ve elle değiştirme stratejilerini uygulayın.
NA Değerlerini Kaldırma ve Değiştirme, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
NA İşleme Stratejileri
Eksik değerleri işlemenin üç temel stratejisi vardır: onları kaldırmak, bir sabitle değiştirmek veya istatistiksel bir tahmin kullanarak veri doldurma yapmak. Doğru yaklaşım verilerinize ve analiz hedeflerinize bağlıdır.
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, '
')x[!is.na(x)] ile NA'ları Kaldırma
Bir vektörden NA'ları kaldırmanın en doğrudan yolu mantıksal alt kümelemedir: x[!is.na(x)]. Bu ifade yalnızca is.na(x) değerinin FALSE olduğu öğeleri, yani mevcut değerleri tutar.
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), '
')Vektörler için na.omit()
na.omit(x), bir vektördeki NA değerlerini kaldırır. x[!is.na(x)] ile eşdeğerdir; ancak kaldırılan NA'ların konumlarını 'na.action' adlı bir öznitelikte de saklar.
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, '
')Veri Çerçeveleri için na.omit()
Bir veri çerçevesine uygulandığında na.omit(df), en az bir NA içeren her satırı kaldırır. Buna liste bazlı silme denir; gözlemin tamamı kaldırılır.
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() — Satır Bazında Eksiksizlik
complete.cases(df), eksik değer içermeyen satırlar için TRUE içeren bir logical vektör döndürür. Tam satırları filtrelemek veya eksik satırları belirlemek için kullanın.
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), '
')NA'yı Bir Sabitle Değiştirme
NA'yı belirli bir değerle değiştirmek için mantıksal atama kullanın: x[is.na(x)] <- value. Yaygın değişimler arasında sayımlar için 0, sürekli veriler için ortalama/medyan veya faktörler için bir kategori etiketi bulunur.
# 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() — İşlevsel Değiştirme
replace(x, list, values), list konumlarındaki x öğelerini values ile değiştirilmiş bir kopya döndürür. Bu, değiştirme işleminin işlevsel (değişiklik yapmayan) yaklaşımıdır.
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 modifiedİleriye Doğru Doldurma (Son Gözlemi İleri Taşıma)
Yaygın bir veri doldurma stratejisi ileriye doğru doldurmadır (LOCF): her NA'yı bilinen son değerle değiştirin. Bu yöntem, ölçümlerin güncellenene kadar ileri taşındığı zaman serisi verilerinde kullanılır.
# 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, '
')Karakter Vektörlerinde NA'yı Değiştirme
Aynı teknikler karakter vektörlerinde de çalışır. Dizelerdeki NA'ları 'Unknown' veya 'Missing' gibi bir etiketle değiştirmek, kategorik veri analizinde yaygındır.
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))Koşullu Değiştirme Stratejisi
Bazen farklı değiştirme değerlerini başka bir sütunun değerine göre uygulamak istersiniz. Hedefli değişimler yapmak için koşullarla birlikte indeksleme kullanın.
# 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, '
')NA Kaldırma Yöntemleri Özeti
R'deki NA işleme araçlarının özeti:
x[!is.na(x)]— vektörden NA'ları kaldırırna.omit(x)— NA'ları kaldırır (konumları da kaydeder)na.omit(df)— veri çerçevesindeki eksik satırları kaldırırcomplete.cases(df)— logical vektör: eksiksiz satırlar için TRUEx[is.na(x)] <- val— NA'ları yerinde değiştirirreplace(x, is.na(x), val)— işlevsel değiştirme (kopya döndürür)
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)), '
')Hızlı Kontrol
na.omit(c(1, NA, 3, NA, 5)) ne döndürür?
Özet: NA'ları Kaldırma ve Değiştirme
Harika iş! Bu dersten çıkarılacak temel noktalar:
x[!is.na(x)]vena.omit(x)bir vektördeki NA'ları kaldırırna.omit(df)liste bazlı silme yapar (NA içeren her satırı kaldırır)complete.cases(df), eksik değer içermeyen satırları belirlerx[is.na(x)] <- value, NA'ları yerinde değiştirirreplace(x, is.na(x), value), özgün değeri değiştirmeden değiştirilmiş bir kopya döndürür- Stratejinizi verilerin neden eksik olduğuna ve eksiklik miktarına göre seçin
# 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), '
')Sıkça Sorulan Sorular
“NA Değerlerini Kaldırma ve Değiştirme” dersi ücretsiz mi?
Evet — “NA Değerlerini Kaldırma ve Değiştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“NA Değerlerini Kaldırma ve Değiştirme” dersinde ne öğreneceğim?
na.omit(), complete.cases() ve elle değiştirme stratejilerini uygulayın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“NA Değerlerini Kaldırma ve Değiştirme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- R'de NA'yı Anlama
- Eksik Değerleri Belirleme ve Sayma
- NA Değerlerini Kaldırma ve Değiştirme
- Hesaplamalarda ve Toplamalarda NA