NA in Berechnungen und Aggregationen
Steuern Sie das Verhalten von NA in mean(), sum() und anderen Aggregatfunktionen.
NA in Berechnungen und Aggregationen ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.
Der Parameter na.rm
Die meisten Aggregationsfunktionen in R akzeptieren ein Argument namens na.rm (NA entfernen). Wenn es auf TRUE gesetzt ist, ignoriert die Funktion NA-Werte, bevor sie das Ergebnis berechnet. Standardmäßig gilt na.rm = FALSE, sodass sich NAs fortpflanzen.
scores <- c(88, NA, 72, 95, NA, 81, 67)
cat('With na.rm=FALSE (default):
')
cat(' mean:', mean(scores), '
') # NA
cat(' sum: ', sum(scores), '
') # NA
cat('With na.rm=TRUE:
')
cat(' mean:', mean(scores, na.rm = TRUE), '
') # 80.6
cat(' sum: ', sum(scores, na.rm = TRUE), '
') # 403mean() mit na.rm
mean(x, na.rm = TRUE) berechnet den arithmetischen Mittelwert der nicht fehlenden Werte. Der Nenner entspricht der Anzahl vorhandener Werte, nicht der Gesamtlänge.
temperatures <- c(22.1, NA, 19.8, 25.1, NA, 17.3, 20.0)
cat('Total elements:', length(temperatures), '
')
cat('Present elements:', sum(!is.na(temperatures)), '
')
cat('Mean (na.rm=TRUE):', mean(temperatures, na.rm = TRUE), '
')
# Manual verification
cat('Manual mean:', sum(temperatures, na.rm=TRUE) / sum(!is.na(temperatures)), '
')sum() mit na.rm
sum(x, na.rm = TRUE) addiert nur die Werte, die nicht NA sind. Das ist unerlässlich, um TRUE-Werte in einem logischen Vektor zu zählen, der NAs enthalten kann, oder um Summen aus unvollständigen Daten zu berechnen.
sales_daily <- c(1200, NA, 980, 1450, NA, 1100, 890)
cat('Sum (default):', sum(sales_daily), '
') # NA
cat('Sum (na.rm): ', sum(sales_daily, na.rm = TRUE), '
') # 5620
# Count observations meeting a condition (NA-safe)
cat('Days over 1000:', sum(sales_daily > 1000, na.rm = TRUE), '
')min() und max() mit na.rm
Auch min() und max() verfügen über den Parameter na.rm. Ohne ihn führt bereits ein einzelnes NA in der Eingabe dazu, dass die Funktion NA zurückgibt. Mit na.rm = TRUE werden die Extremwerte der vorhandenen Werte zurückgegeben.
blood_pressure <- c(120, NA, 135, 118, NA, 142, 125, NA, 130)
cat('Max BP (default):', max(blood_pressure), '
') # NA
cat('Max BP (na.rm): ', max(blood_pressure, na.rm = TRUE), '
') # 142
cat('Min BP (na.rm): ', min(blood_pressure, na.rm = TRUE), '
') # 118
cat('Range (na.rm): ', range(blood_pressure, na.rm = TRUE), '
')var() und sd() mit na.rm
Auch Varianz (var()) und Standardabweichung (sd()) unterstützen na.rm. Sie berechnen die Statistik ausschließlich anhand der nicht fehlenden Beobachtungen und passen dabei automatisch die Freiheitsgrade an.
exam_scores <- c(78, 85, NA, 92, 68, 75, NA, 88, 91, NA)
n_valid <- sum(!is.na(exam_scores))
cat('Valid observations:', n_valid, '
')
cat('Mean: ', round(mean(exam_scores, na.rm = TRUE), 2), '
')
cat('SD: ', round(sd(exam_scores, na.rm = TRUE), 2), '
')
cat('Var: ', round(var(exam_scores, na.rm = TRUE), 2), '
')median() und quantile() mit na.rm
median() und quantile() sind gegenüber Ausreißern oft robuster als der Mittelwert, benötigen aber ebenfalls na.rm = TRUE, um fehlende Werte korrekt zu verarbeiten.
incomes <- c(45000, NA, 52000, 48000, NA, 210000, 51000, NA, 49000)
cat('Observations:', sum(!is.na(incomes)), '
')
cat('Median income:', median(incomes, na.rm = TRUE), '
')
cat('Mean income: ', mean(incomes, na.rm = TRUE), '
') # pulled up by 210000
cat('25th pctile: ', quantile(incomes, 0.25, na.rm = TRUE), '
')
cat('75th pctile: ', quantile(incomes, 0.75, na.rm = TRUE), '
')prod() und cumsum() mit na.rm
prod(x, na.rm = TRUE) berechnet das Produkt der Werte, die nicht NA sind. Kumulative Funktionen wie cumsum() verfügen NICHT über na.rm – NAs pflanzen sich ab dem ersten fehlenden Wert fort.
growth_rates <- c(1.05, NA, 1.03, 1.08, NA, 1.02)
cat('Product of rates:', prod(growth_rates, na.rm = TRUE), '
')
# cumsum propagates NAs
values <- c(10, 20, NA, 40, 50)
cat('cumsum (with NA):', cumsum(values), '
')
# Workaround: replace NA first
filled <- replace(values, is.na(values), 0)
cat('cumsum (NA=0): ', cumsum(filled), '
')na.rm in Apply-Funktionen
Wenn Sie apply() auf die Zeilen oder Spalten einer Matrix anwenden, können Sie na.rm = TRUE mithilfe von ... an die Funktion übergeben. Dadurch werden Aggregationen unter Ignorierung von NAs berechnet.
m <- matrix(c(88,NA,72, 95,81,NA, 67,75,90), nrow = 3)
cat('Matrix:
'); print(m)
# Row means ignoring NAs
cat('Row means (na.rm=TRUE):', apply(m, 1, mean, na.rm = TRUE), '
')
# Col means ignoring NAs
cat('Col means (na.rm=TRUE):', apply(m, 2, mean, na.rm = TRUE), '
')rowSums() / colSums() mit na.rm
rowSums() und colSums() haben einen eigenen Parameter na.rm (er wird nicht über ... übergeben). Mit na.rm = TRUE behandeln die Funktionen NA bei Summen wie 0.
sales <- matrix(c(100,NA,80, NA,90,70, 110,85,NA), nrow = 3)
cat('Sales matrix:
'); print(sales)
cat('Row sums (na.rm=F):', rowSums(sales), '
') # NAs propagate
cat('Row sums (na.rm=T):', rowSums(sales, na.rm = TRUE), '
')
cat('Col means (na.rm=T):', colMeans(sales, na.rm = TRUE), '
')Vergleich: na.rm=FALSE vs. TRUE
Wann Sie na.rm = TRUE statt FALSE verwenden, hängt von Ihrem Analyseziel ab: FALSE stellt sicher, dass Sie erkennen, wenn Daten unvollständig sind; TRUE berechnet bestmögliche Statistiken auf Grundlage der verfügbaren Daten.
# Always check: how much data is missing BEFORE using na.rm=TRUE
collected <- c(78, NA, 85, NA, 91, 74, NA, 88, 82, NA)
pct_missing <- mean(is.na(collected)) * 100
cat('Missing:', round(pct_missing, 1), '% of data
')
if (pct_missing < 20) {
cat('Acceptable: computing mean with na.rm=TRUE
')
cat('Mean:', round(mean(collected, na.rm = TRUE), 2), '
')
} else {
cat('Too much missing data — investigate before computing
')
}na.rm in benutzerdefinierten Funktionen
Wenn Sie eigene Aggregationsfunktionen schreiben, fügen Sie einen na.rm-Parameter hinzu und geben Sie ihn an die R-Basisfunktionen weiter. Dadurch entsprechen Ihre Funktionen den Konventionen von R.
# Custom function with na.rm support
cv <- function(x, na.rm = FALSE) {
# Coefficient of Variation = SD / mean
s <- sd(x, na.rm = na.rm)
m <- mean(x, na.rm = na.rm)
return(s / m)
}
readings <- c(22.1, NA, 19.8, 25.1, NA, 17.3, 20.0)
cat('CV (na.rm=FALSE):', cv(readings), '
') # NA
cat('CV (na.rm=TRUE): ', round(cv(readings, na.rm = TRUE), 4), '
')Schnelltest
Was gibt mean(c(10, 20, NA, 40), na.rm = TRUE) zurück?
Zusammenfassung: NA in Berechnungen
Ausgezeichnet! Die wichtigsten Erkenntnisse aus dieser Lektion:
- Die meisten Aggregationsfunktionen (
mean,sum,min,max,sdusw.) verfügen über einenna.rm-Parameter na.rm = FALSE(Standardwert) bedeutet, dass sich NA fortpflanzt – wenn ein Wert NA ist, ist auch das Ergebnis NAna.rm = TRUEignoriert NAs und berechnet die Statistik ausschließlich aus den vorhandenen Werten- Der Nenner bei
mean(na.rm=TRUE)ist die Anzahl der Werte, die nicht NA sind, und nicht die Gesamtlänge - Prüfen Sie immer den Anteil fehlender Daten, bevor Sie mit
na.rm=TRUEStatistiken berechnen - Fügen Sie
na.rmin Ihre eigenen Aggregationsfunktionen ein, um der R-Konvention zu folgen
# Complete summary with na.rm
data_vec <- c(55, NA, 72, 88, NA, 61, 79, NA, 93, 68)
cat('N valid:', sum(!is.na(data_vec)), '
')
cat('Mean: ', round(mean(data_vec, na.rm=TRUE), 2), '
')
cat('Median:', median(data_vec, na.rm=TRUE), '
')
cat('SD: ', round(sd(data_vec, na.rm=TRUE), 2), '
')
cat('Min: ', min(data_vec, na.rm=TRUE), '
')
cat('Max: ', max(data_vec, na.rm=TRUE), '
')Häufig gestellte Fragen
Ist die Lektion „NA in Berechnungen und Aggregationen“ kostenlos?
Ja — der vollständige Text von „NA in Berechnungen und Aggregationen“ 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 in Berechnungen und Aggregationen“?
Steuern Sie das Verhalten von NA in mean(), sum() und anderen Aggregatfunktionen. 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 4 von 4.
Wie lange dauert die Lektion „NA in Berechnungen und Aggregationen“?
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