NA i beregninger og aggregasjoner
Styr hvordan NA behandles i mean(), sum() og andre aggregatfunksjoner.
NA i beregninger og aggregasjoner er en gratis leksjon i R Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i R Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i R Academy inneholder totalt 4 leksjoner.
Parameteren na.rm
De fleste aggregeringsfunksjonene i R godtar argumentet na.rm (fjern NA). Når det settes til TRUE, ignorerer funksjonen NA-verdier før resultatet beregnes. Som standard er na.rm = FALSE, slik at NA-verdier videreføres.
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() med na.rm
mean(x, na.rm = TRUE) beregner det aritmetiske gjennomsnittet av de ikke-manglende verdiene. Nevneren er antallet verdier som finnes, ikke den totale lengden.
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() med na.rm
sum(x, na.rm = TRUE) summerer bare verdiene som ikke er NA. Dette er nødvendig når De skal telle TRUE-verdier i en logisk vektor som kan inneholde NA-verdier, eller beregne totaler fra ufullstendige data.
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() og max() med na.rm
min() og max() har også parameteren na.rm. Uten denne parameteren fører én enkelt NA-verdi i inndataene til at funksjonen returnerer NA. Med na.rm = TRUE returneres ytterpunktene blant verdiene som finnes.
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() og sd() med na.rm
Varians (var()) og standardavvik (sd()) støtter også na.rm. De beregner statistikken bare basert på ikke-manglende observasjoner og justerer automatisk frihetsgradene.
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() og quantile() med na.rm
median() og quantile() er ofte mer robuste mot uteliggere enn gjennomsnittet, men de trenger også na.rm = TRUE for å håndtere manglende verdier riktig.
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() og cumsum() med na.rm
prod(x, na.rm = TRUE) beregner produktet av verdiene som ikke er NA. Kumulative funksjoner som cumsum() har IKKE na.rm — NA-verdier videreføres fra den første manglende verdien og utover.
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 i apply-funksjoner
Når De bruker apply() på rader eller kolonner i en matrise, kan De sende na.rm = TRUE til funksjonen ved hjelp av .... Da beregnes aggregater mens NA-verdier ignoreres.
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() med na.rm
rowSums() og colSums() har sin egen na.rm-parameter (den sendes ikke via ...). Med na.rm = TRUE behandles NA som 0 i summeringer.
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), '
')Sammenligning: na.rm=FALSE kontra TRUE
Det er analyseformålet som avgjør når De bør bruke na.rm = TRUE i stedet for FALSE: FALSE sikrer at De blir oppmerksom på at dataene er ufullstendige, mens TRUE beregner statistikk basert på tilgjengelige data.
# 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 i brukerfunksjoner
Når De skriver egne aggregeringsfunksjoner, bør De inkludere en na.rm-parameter og sende den videre til R-funksjonene i grunnpakken. Da blir funksjonene Deres i tråd med R-konvensjonene.
# 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), '
')Hurtigsjekk
Hva returnerer mean(c(10, 20, NA, 40), na.rm = TRUE)?
Oppsummering: NA i beregninger
Utmerket! Dette er de viktigste punktene fra leksjonen:
- De fleste aggregeringsfunksjoner (
mean,sum,min,max,sdog så videre) har enna.rm-parameter na.rm = FALSE(standardverdien) betyr at NA videreføres — hvis én verdi er NA, blir resultatet NAna.rm = TRUEignorerer NA-verdier og beregner statistikken bare fra verdiene som finnes- Nevneren i
mean(na.rm=TRUE)er antallet verdier som ikke er NA, ikke den totale lengden - Kontroller alltid andelen manglende data før De beregner statistikk med
na.rm=TRUE - Inkluder
na.rmi Deres egne aggregeringsfunksjoner for å følge R-konvensjonen
# 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), '
')Lær deg R med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 43
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «NA i beregninger og aggregasjoner» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien R Academy, inkludert «NA i beregninger og aggregasjoner», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i R Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «NA i beregninger og aggregasjoner»?
Styr hvordan NA behandles i mean(), sum() og andre aggregatfunksjoner. Du øver på R Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med R Academy?
Ingen tidligere erfaring er nødvendig. R Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «NA i beregninger og aggregasjoner»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne R Academy-leksjonen?
Ja. Alle R Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Forstå NA i R
- Oppdage og telle manglende verdier
- Fjerne og erstatte NA-verdier
- NA i beregninger og aggregasjoner