R Academy · Les

NA in berekeningen en aggregaties

Bepaal het gedrag van NA in mean(), sum() en andere aggregatiefuncties.

Les 4 van 413 stappen

NA in berekeningen en aggregaties is een gratis R Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject R Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus R Academy bevat in totaal 4 lessen.

De parameter na.rm

De meeste aggregatiefuncties in R accepteren een argument na.rm (NA verwijderen). Als dit op TRUE staat, negeert de functie NA-waarden voordat het resultaat wordt berekend. Standaard is na.rm = FALSE, waardoor NA-waarden worden doorgegeven.

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), '
')   # 403

mean() met na.rm

mean(x, na.rm = TRUE) berekent het rekenkundige gemiddelde van de niet-ontbrekende waarden. De noemer is het aantal aanwezige waarden, niet de totale lengte.

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() met na.rm

sum(x, na.rm = TRUE) telt alleen de niet-NA-waarden op. Dit is essentieel voor het tellen van TRUE-waarden in een logische vector die NA-waarden kan bevatten, of voor het berekenen van totalen uit onvolledige gegevens.

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() en max() met na.rm

min() en max() hebben ook de parameter na.rm. Zonder deze parameter zorgt één NA in de invoer ervoor dat de functie NA retourneert. Met na.rm = TRUE worden de uiterste waarden van de aanwezige waarden geretourneerd.

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() en sd() met na.rm

Variantie (var()) en standaardafwijking (sd()) ondersteunen ook na.rm. Ze berekenen de statistiek uitsluitend op basis van niet-ontbrekende observaties en passen automatisch de vrijheidsgraden aan.

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() en quantile() met na.rm

median() en quantile() zijn vaak robuuster voor uitschieters dan het gemiddelde, maar hebben ook na.rm = TRUE nodig om ontbrekende waarden correct te verwerken.

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() en cumsum() met na.rm

prod(x, na.rm = TRUE) berekent het product van niet-NA-waarden. Cumulatieve functies zoals cumsum() hebben GEEN na.rm — NA-waarden worden vanaf de eerste ontbrekende waarde doorgegeven.

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-functies

Wanneer je apply() op rijen of kolommen van een matrix gebruikt, kun je na.rm = TRUE via ... aan de functie doorgeven. Hiermee bereken je aggregaten terwijl NA-waarden worden genegeerd.

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() met na.rm

rowSums() en colSums() hebben hun eigen parameter na.rm (die niet via ... wordt doorgegeven). Met na.rm = TRUE behandelen ze NA als 0 bij sommen.

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), '
')

Vergelijking: na.rm=FALSE versus TRUE

Weten wanneer je na.rm = TRUE versus FALSE gebruikt, hangt af van je analyse-intentie: FALSE zorgt ervoor dat je weet dat de gegevens onvolledig zijn; TRUE berekent statistieken als beste schatting op basis van de beschikbare gegevens.

# 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 gebruikersfuncties

Wanneer je je eigen aggregatiefuncties schrijft, voeg je een parameter na.rm toe en geef je die door aan basisfuncties van R. Zo blijven je functies consistent met de conventies van 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), '
')

Korte controle

Wat geeft mean(c(10, 20, NA, 40), na.rm = TRUE) terug?

Samenvatting: NA in berekeningen

Uitstekend! Dit zijn de belangrijkste punten uit deze les:

  • De meeste aggregatiefuncties (mean, sum, min, max, sd enzovoort) hebben een parameter na.rm
  • na.rm = FALSE (standaard) betekent dat NA wordt doorgegeven: als een waarde NA is, is het resultaat NA
  • na.rm = TRUE negeert NA's en berekent de statistiek alleen op basis van aanwezige waarden
  • De noemer voor mean(na.rm=TRUE) is het aantal niet-NA-waarden, niet de totale lengte
  • Controleer altijd het aandeel ontbrekende gegevens voordat je statistieken berekent met na.rm=TRUE
  • Neem na.rm op in je eigen aggregatiefuncties om de conventie van R te volgen
# 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), '
')
Gratis beginnen

Leer R met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
43
Lessen
159

Veelgestelde vragen

Is de les “NA in berekeningen en aggregaties” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “NA in berekeningen en aggregaties”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus R Academy bevat in totaal 4 lessen.

Wat leer ik in “NA in berekeningen en aggregaties”?

Bepaal het gedrag van NA in mean(), sum() en andere aggregatiefuncties. Je oefent met R Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met R Academy te beginnen?

Ervaring vooraf is niet nodig. R Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “NA in berekeningen en aggregaties”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over R Academy?

Ja. Elke les over R Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. NA in R begrijpen
  2. Ontbrekende waarden detecteren en tellen
  3. NA-waarden verwijderen en vervangen
  4. NA in berekeningen en aggregaties
← Terug naar R Academy