R Academy · Oppitunti

NA laskutoimituksissa ja aggregoinneissa

Hallinnoikaa NA:n toimintaa mean()-, sum()- ja muissa aggregointifunktioissa.

Oppitunti 4/413 vaihetta

NA laskutoimituksissa ja aggregoinneissa on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.

na.rm-parametri

Useimmat R:n aggregointifunktiot hyväksyvät na.rm-argumentin (poista NA). Kun sen arvoksi asetetaan TRUE, funktio ohittaa NA-arvot ennen tuloksen laskemista. Oletusarvo on na.rm = FALSE, joten NA-arvot leviävät tulokseen.

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

mean(x, na.rm = TRUE) laskee ei-puuttuvien arvojen aritmeettisen keskiarvon. Jakajana käytetään olemassa olevien arvojen määrää, ei vektorin kokonaispituutta.

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

sum(x, na.rm = TRUE) laskee yhteen vain ei-NA-arvot. Tämä on olennaista laskettaessa TRUE-arvoja loogisesta vektorista, joka saattaa sisältää NA-arvoja, tai laskettaessa summia keskeneräisestä aineistosta.

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() ja max() sekä na.rm

Myös funktioilla min() ja max() on na.rm-parametri. Ilman sitä yksikin syötteen NA-arvo saa funktion palauttamaan NA:n. Kun käytetään arvoa na.rm = TRUE, palautetaan olemassa olevien arvojen pienin tai suurin arvo.

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() ja sd() sekä na.rm

Myös varianssi (var()) ja keskihajonta (sd()) tukevat parametria na.rm. Ne laskevat tunnusluvun vain ei-puuttuvien havaintojen perusteella ja mukauttavat vapausasteet automaattisesti.

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() ja quantile() sekä na.rm

median() ja quantile() kestävät usein poikkeavia arvoja paremmin kuin keskiarvo, mutta myös niiden kanssa on käytettävä arvoa na.rm = TRUE, jotta puuttuvat arvot käsitellään oikein.

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() ja cumsum() sekä na.rm

prod(x, na.rm = TRUE) laskee ei-NA-arvojen tulon. Kumulatiivisilla funktioilla, kuten cumsum(), EI ole parametria na.rm — NA-arvot leviävät ensimmäisestä puuttuvasta arvosta alkaen.

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 apply-funktioissa

Kun käytätte apply()-funktiota matriisin riveillä tai sarakkeilla, voitte välittää funktiolle arvon na.rm = TRUE argumentin ... kautta. Tällöin aggregaatit lasketaan ohittaen NA-arvot.

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

Funktioilla rowSums() ja colSums() on oma na.rm-parametrinsa, jota ei välitetä argumentin ... kautta. Kun käytätte arvoa na.rm = TRUE, funktiot käsittelevät NA-arvot summissa nollina.

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

Vertailu: na.rm=FALSE vs TRUE

Sen ymmärtäminen, milloin käytetään arvoa na.rm = TRUE ja milloin arvoa FALSE, riippuu analyysin tavoitteesta: FALSE varmistaa, että huomaat datan olevan puutteellista, kun taas TRUE laskee parhaan arvion tilastoista käytettävissä olevien tietojen perusteella.

# 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 käyttäjän funktioissa

Kun kirjoitatte omia aggregointifunktioita, sisällyttäkää niihin na.rm-parametri ja välittäkää se edelleen R:n perusfunktioille. Näin funktioiden toiminta noudattaa R:n käytäntöjä.

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

Pikatarkistus

Mitä mean(c(10, 20, NA, 40), na.rm = TRUE) palauttaa?

Kertaus: NA laskutoimituksissa

Erinomaista! Tämän oppitunnin keskeiset opit:

  • Useimmissa aggregointifunktioissa (mean, sum, min, max, sd jne.) on na.rm-parametri
  • na.rm = FALSE (oletus) tarkoittaa, että NA-arvo välittyy tulokseen — jos jokin arvo on NA, tulos on NA
  • na.rm = TRUE ohittaa NA-arvot ja laskee tilaston vain olemassa olevien arvojen perusteella
  • Funktion mean(na.rm=TRUE) nimittäjä on muiden kuin NA-arvojen määrä, ei vektorin kokonaispituus
  • Tarkistakaa aina puuttuvien tietojen osuus ennen kuin laskette tilastoja parametrilla na.rm=TRUE
  • Sisällyttäkää na.rm omiin aggregointifunktioihinne R:n käytännön mukaisesti
# 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), '
')
Aloita maksutta

Opi R tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
43
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”NA laskutoimituksissa ja aggregoinneissa” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “NA laskutoimituksissa ja aggregoinneissa”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”NA laskutoimituksissa ja aggregoinneissa”?

Hallinnoikaa NA:n toimintaa mean()-, sum()- ja muissa aggregointifunktioissa. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”NA laskutoimituksissa ja aggregoinneissa”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?

Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. NA:n ymmärtäminen R:ssä
  2. Puuttuvien arvojen tunnistaminen ja laskeminen
  3. NA-arvojen poistaminen ja korvaaminen
  4. NA laskutoimituksissa ja aggregoinneissa
← Takaisin: R Academy