Sagedasemad andmemaatriksile rakendatavad funktsioonid

Mõnda funktsiooni, mida andmemaatriksile rakendada saab oleme juba näinud. Näiteks names, mis võimaldab veerunimesid vaadata või määrata. Väga kasulikud on ka funktsioonid dim ja str. Esimene väljastab lihtsalt ridade ja veergude arvud (ehk maatriksi mõõtmed) , teine aga näitab lisaks objekti tüübile ka veergude olemust.

> str(andmed1)
'data.frame': 30 obs. of 4 variables:
$ toit : Factor w/ 3 levels "a","b","c": 1 2 3 1 2 3 1 2 3 1 ...
$ grupp : int 1 1 1 2 2 2 3 3 3 4 ...
$ pikkus: num 5.45 7.95 5.23 9.56 10.4 ...
$ kaal : num 17.27 21.09 9.33 NA 26.55 ...

Funktsioon str on tegelikult väga universaalne ja seda saab rakendada mistahes objektile.

Andmemaatriksist annab mõningase ülevaate ka funktsioon summary, mis vastavalt sellele, kas vastav tunnus on nominaalne või arvuline, väljastab ka ülevaate erinevalt.

> summary(andmed1)
 toit       grupp          pikkus            kaal     
 a:10   Min.   : 1.0   Min.   : 5.230   Min.   : 9.33 
 b:10   1st Qu.: 3.0   1st Qu.: 8.768   1st Qu.:21.65 
 c:10   Median : 5.5   Median :10.150   Median :25.66 
        Mean   : 5.5   Mean   :10.467   Mean   :26.04 
        3rd Qu.: 8.0   3rd Qu.:12.188   3rd Qu.:30.11 
        Max.   :10.0   Max.   :17.820   Max.   :47.58 
                       NA's   : 2.000   NA's   : 3.00 
 

Üks aspekt, millele sageli tähelepanu pöörata tuleb on puuduvad väärtused. Paljud funktsioonid ei filtreeri neid (vähemalt vaikimisi) sisenditest välja ja sel juhul on ka funktsiooni tulemiks puuduv väärtus. Kuidas siis lihtsasti puuduvad väärtused üles leida? Abiks on siin peamiselt kaks funktsiooni: is.na kontrollib lihtsalt kas vastav element on puudu complete.cases aga loeb puudulikuks iga sellise andmerea, kus vähemalt ühe tunnuse väärtus on puuduv.

> is.na(andmed[,4])
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[13] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
[25] FALSE FALSE FALSE FALSE FALSE FALSE

> complete.cases(andmed)
[1] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
[13] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE
[25] TRUE FALSE TRUE TRUE TRUE TRUE

Märkimist väärivad veel funktsioonid apply ja sapply. Esimene võimladab mingi funktsiooni rakendamist ridade või veergude kaupa, teine aga igale elemendile. Seega näiteks numriliste tunnuste summad saame kätte järgnevalt:

> apply(andmed1[,2:4],2,sum)
grupp pikkus kaal
165 NA NA

Esmalt süntaksiselgitus -- esimene argument on objekt, millele tahame rakendada funktsiooni. Seda,kas rakendada seda funktsiooni igas reas või igas veerus saame valida teise argumendi vastavate väärtustega 1 ja 2,ning funktsiooni enda määrab ära kolmas argument. Tulem on just selline, sest kahel viimasel tunnusel esines puuduvaid väärtusi. Kuidas antud juhul paremat tulemust saada?

> apply(andmed1[,2:4],2,sum,na.rm=T)
grupp pikkus kaal
165.00 293.07 702.97


Üsna tüüpiliselt antakse R-is ülejäänud argumendid edasi funktsioonile ja antud juhul siis ei rakendata mitte lihtsalt funktsiooni sum igale veerule, vaid tehakse seda koos argumendiga na.rm=T.

Lõpuks veel üks huvitav funktsioon nimega by. Esimesena tuleb ette anda mingi andmemaatriks, teisena kategooriatesse jagav tunnus ning viimasena funktsioon, mida siis igasse kategooriasse kuuluvatele elementidele eraldi rakendatatkse. Näiteks tunnuse pikkus keskmine iga tunnuse grupp väärtuse korral.

> by(andmed[,3],andmed$grupp,mean,na.rm=T)
andmed$grupp: 1
[1] 6.21
------------------------------------------------------------
andmed$grupp: 2
[1] 9.76
------------------------------------------------------------
andmed$grupp: 3
[1] 10.33
------------------------------------------------------------
andmed$grupp: 4
[1] 9.54
------------------------------------------------------------
andmed$grupp: 5
[1] 13.18667
------------------------------------------------------------
andmed$grupp: 6
[1] 8.296667
------------------------------------------------------------
andmed$grupp: 7
[1] 12.29
------------------------------------------------------------
andmed$grupp: 8
[1] 10.75
------------------------------------------------------------
andmed$grupp: 9
[1] 8.785
------------------------------------------------------------
andmed$grupp: 10
[1] 15.56667

Rohkelt kasulikke funktsioone andmete manipuleerimiseks leiab ka paketist plyer.