NA-Werte entfernen und ersetzen
Wenden Sie na.omit(), complete.cases() und manuelle Ersetzungsstrategien an.
NA-Werte entfernen und ersetzen ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Strategien zum Umgang mit NA
Für den Umgang mit fehlenden Werten gibt es drei wesentliche Strategien: Sie können sie entfernen, durch eine Konstante ersetzen oder mithilfe einer statistischen Schätzung imputieren. Welche Vorgehensweise geeignet ist, hängt von Ihren Daten und den Zielen Ihrer Analyse ab.
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, '
')NAs mit x[!is.na(x)] entfernen
Die direkteste Möglichkeit, NAs aus einem Vektor zu entfernen, ist logisches Subsetting: x[!is.na(x)]. Dadurch bleiben nur die Elemente erhalten, für die is.na(x) FALSE ist (also vorhandene Werte).
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() für Vektoren
na.omit(x) entfernt NA-Werte aus einem Vektor. Die Funktion entspricht x[!is.na(x)], speichert aber zusätzlich die Positionen der entfernten NAs in einem Attribut namens '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() für Data Frames
Wird na.omit(df) auf einen Data Frame angewendet, entfernt die Funktion jede Zeile, die mindestens ein NA enthält. Dies wird als listenweiser Ausschluss bezeichnet – die gesamte Beobachtung wird entfernt.
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() – Vollständigkeit pro Zeile
complete.cases(df) gibt einen logischen Vektor zurück, der für Zeilen ohne fehlende Werte TRUE enthält. Verwenden Sie ihn, um vollständige Zeilen zu filtern oder unvollständige Zeilen zu ermitteln.
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 durch eine Konstante ersetzen
Um NA durch einen bestimmten Wert zu ersetzen, verwenden Sie eine logische Zuweisung: x[is.na(x)] <- value. Häufige Ersetzungen sind 0 für Zählwerte, der Mittelwert oder Median für kontinuierliche Daten oder eine Kategorienbezeichnung für Faktoren.
# 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() – Funktionales Ersetzen
replace(x, list, values) gibt eine modifizierte Kopie von x zurück, in der die Elemente an den Positionen aus list durch values ersetzt wurden. Dies ist der funktionale Ansatz zum Ersetzen, bei dem das ursprüngliche Objekt nicht verändert wird.
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 modifiedVorwärtsauffüllen (Last Observation Carried Forward)
Eine verbreitete Imputationsstrategie ist das Vorwärtsauffüllen (LOCF): Jedes NA wird durch den zuletzt bekannten Wert ersetzt. Dies wird bei Zeitreihendaten verwendet, wenn Messwerte bis zu ihrer Aktualisierung fortgeschrieben werden.
# 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, '
')NA in Zeichenkettenvektoren ersetzen
Dieselben Techniken funktionieren auch für Zeichenkettenvektoren. In der kategorialen Datenanalyse ist es üblich, NA in Zeichenketten durch eine Bezeichnung wie 'Unknown' oder 'Missing' zu ersetzen.
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))Strategie zum bedingten Ersetzen
Manchmal sollen abhängig vom Wert einer anderen Spalte unterschiedliche Ersatzwerte verwendet werden. Verwenden Sie eine indizierte Auswahl mit Bedingungen, um gezielte Ersetzungen vorzunehmen.
# 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, '
')Zusammenfassung der Methoden zum Entfernen von NA
Zusammenfassung der Werkzeuge zum Umgang mit NA in R:
x[!is.na(x)]– NAs aus einem Vektor entfernenna.omit(x)– NAs entfernen (und zusätzlich ihre Positionen speichern)na.omit(df)– unvollständige Zeilen aus einem Data Frame entfernencomplete.cases(df)– logischer Vektor: TRUE für vollständige Zeilenx[is.na(x)] <- val– NAs direkt ersetzenreplace(x, is.na(x), val)– funktionales Ersetzen (gibt eine Kopie zurück)
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)), '
')Kurze Wissensprüfung
Welchen Wert gibt na.omit(c(1, NA, 3, NA, 5)) zurück?
Zusammenfassung: NAs entfernen und ersetzen
Sehr gut! Die wichtigsten Erkenntnisse aus dieser Lektion:
x[!is.na(x)]undna.omit(x)entfernen NAs aus einem Vektorna.omit(df)führt einen listenweisen Ausschluss durch (entfernt jede Zeile mit einem NA)complete.cases(df)ermittelt Zeilen ohne fehlende Wertex[is.na(x)] <- valueersetzt NAs direktreplace(x, is.na(x), value)gibt eine modifizierte Kopie zurück, ohne das Original zu verändern- Wählen Sie Ihre Strategie danach aus, warum Daten fehlen und wie viele Werte fehlen
# 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), '
')Lerne R mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 43
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „NA-Werte entfernen und ersetzen“ kostenlos?
Ja — der vollständige Text von „NA-Werte entfernen und ersetzen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „NA-Werte entfernen und ersetzen“?
Wenden Sie na.omit(), complete.cases() und manuelle Ersetzungsstrategien an. Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um R Academy zu starten?
Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „NA-Werte entfernen und ersetzen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?
Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- NA in R verstehen
- Fehlende Werte erkennen und zählen
- NA-Werte entfernen und ersetzen
- NA in Berechnungen und Aggregationen