NA laskutoimituksissa ja aggregoinneissa
Hallinnoikaa NA:n toimintaa mean()-, sum()- ja muissa aggregointifunktioissa.
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), '
') # 403mean() 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,sdjne.) onna.rm-parametri na.rm = FALSE(oletus) tarkoittaa, että NA-arvo välittyy tulokseen — jos jokin arvo on NA, tulos on NAna.rm = TRUEohittaa 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.rmomiin 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), '
')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
- NA:n ymmärtäminen R:ssä
- Puuttuvien arvojen tunnistaminen ja laskeminen
- NA-arvojen poistaminen ja korvaaminen
- NA laskutoimituksissa ja aggregoinneissa