Tüüpilised andmete saamise viisid on:
Sellel kursusel tegeleme põhiliselt küsitluste ja andmebaaside andmetega, mida hoitakse tabelkujul ning mille ridades olevaid vaatlusi (ingl observation) iseloomustatakse teatud tulpades asuvate tunnuste (ingl variable) abil. Tabeli lahtrites omakorda on iga vaatluse iga tunnuse väärtus (ingl value).
Wickham, Çetinkaya-Rundel, Grolemund (2023). R for Data Science (2e)
Näiteks võime iseloomustada inimesi nende pikkuse, kaalu, silmavärvi, hariduse jpm tunnuste põhjal. Sõnu jällegi võib iseloomustada nende graafilise pikkuse, silpide arvu, välte, tähendusklassi, sõnaliigi, sageduse jms tunnuste põhjal.
Tunnused/muutujad aitavad niisiis andmeid kirjeldada
ja jagunevad uuritavateks/sõltuvateks tunnusteks (see,
mida uurime ja mille kohta tahame midagi väita) ja
seletavateks/sõltumatuteks tunnusteks (need, mille
kaudu uuritavat tunnust iseloomustame). Inglise keeles viidatakse neile
sageli vastavalt kui dependent variable / response
(variable) / outcome (variable) ja independent
variable / predictor (variable) / explanatory
variable.
Näiteks võime uuritava tunnusena käsitleda inimese kaalu ning seletavate
tunnustena inimese pikkust, füüsilist aktiivsust (nt minutites nädalas),
unetundide arvu jms. Sõnade puhul võib meil olla näiteks hüpotees, et
sagedasemad sõnad on lühemad, mispuhul saame uuritavaks tunnuseks võtta
sõna pikkuse ja seletavaks tunnuseks sõna sageduse. Kas võiks ka
vastupidi?
Mis on järgmistes näidetes uuritav ja mis seletav tunnus?
See, et andmeanalüüs on kvantitatiivne, ei tähenda, et kõik andmed ise peaksid tingimata olema arvulised. Laiemalt jagunevadki tunnused kvalitatiivseteks ja kvantitatiivseteks.
Eri skaalal tunnused võimaldavad erineval hulgal tehteid.
Tunnuseid on võimalik teisendada ühest klassist teise, ent
ainult suunal suhteskaala -> nominaalskaala ehk ratio ->
nominal!
Näiteks sõnasagedus on intervalliskaala tunnus, aga võime sõnad jagada
ka klassidesse harvad, keskmise sagedusega ja
sagedased, mispuhul on tegemist järjestusskaala tunnusega.
Vastupidi ei ole aga võimalik tunnuseid teisendada.
Küsitluses, millele vastasid, olid järgmised küsimused. Millised neist on kvalitatiivsed ja millised kvantitatiivsed? Millisel skaalal tunnused on?
##
## Q2 "Mis on sinu sünniaasta?"
## Q3 "Millisel õppekaval õpid?"
## Q4 "Mitu aastat oled käinud ülikoolis?"
## Q5 "Kas sul on varasemaid kogemusi kvantitatiivsete meetoditega? "
## Q6 "Kirjelda oma programmeerimisoskusi (ükskõik mis keeles)"
## Q7 "Kui tõenäoline on, et läbid selle kursuse?"
## Q8 "Kohv või tee?"
## Q9 "Hinda oma söögitegemisoskusi"
## Q10 "Vali loom"
Saame R-is töötada erinevat tüüpi andmetega. Suhte- ja intervallskaala väärtused on tüüpiliselt arvud, nominaal- ja järjestusskaala väärtused on tüüpiliselt tekst. Viimaseid tuleb R-is kirjutada jutumärkide vahele.
## [1] 68
## [1] 2.464695
## [1] "kass"
## [1] "kass ja koer"
Võime toimetada R-is niisiis küll ka konkreetsete arvude või
tekstijärjenditega, aga enamasti tekib meil vajadus neid väärtusi või
erinevate tehete tulemusi hilisemaks kasutamiseks talletada.
Objektiks võimegi nimetada elementi, mis
talletab mingit tüüpi andmeid (teksti/tekste, arve,
tabeleid, maatrikseid jne). Objektile saab väärtusi omistada kas
võrdusmärgiga =
või noolekesega <-
. Sellel
kursusel eelistame noolekest, et selgemalt eristada objektidele ja
funktsiooni argumentidele väärtuste omistamist.
## Error in 68 <- b: invalid (do_set) left-hand side to assignment
Sellisel juhul ilmub objekt R-i keskkonda (Environment paneeli), aga konsooli teda ei trükita. Konsooli trükkimiseks saab kasutada lihtsalt objekti nime.
## [1] 23.52941
Objektide kasutamine teeb esiteks meie koodi paremini loetavaks, kuna objektidele saab anda tähenduslikke nimesid. Piiranguks nimetamisel on vaid see, et objekti nimi ei tohi alata numbriga ega tohi sisaldada tühikuid ega kirjavahemärke peale alakriipsu ja punkti.
pikkus_m <- 1.7 # loome objekti, mille väärtus on 1.7
kaal_kg <- 68 # loome objekti, mille väärtus on 68
KMI <- kaal_kg/(pikkus_m ^ 2) # loome objekti, mille väärtus on objekti 'kaal_kg' väärtus jagatud objekti 'pikkus_m' väärtuse ruuduga
KMI # trükime objekti 'KMI' väärtuse konsooli
## [1] 23.52941
Teiseks saab üht ja sama objekti koodis korduvalt kasutada ja selle väärtusi (nt vastavalt kasutaja sisendile) muuta. Sellest saab paremini aru, kui hakkame andmetabelitega tegelema.
Igat objekti iseloomustavad tüüp ja klass.
Objektitüüp (vahel nimetatakse ka andmetüübiks) ütlebki meile seda, mis sorti andmetega on tegemist. Põhilised objektitüübid on R-is niisiis
123.456
või 1234
"Tere!"
, "Number 2"
,
"123.456"
TRUE
ja FALSE
Arvud (numeric), nagu oleme juba näinud, kirjutatakse lihtsalt numbritega. Arvulise väärtusega muutujatega saab teha matemaatilisi tehteid (liita-lahutada jne).
## [1] 4
arv1 <- 4 # objektile 'arv1' omistatakse väärtus 4, aga midagi välja ei trükita
arv2 <- 5
arv3 <- sqrt((arv1 + arv2)^3) # ^-märk tähistab siin astendamist, sqrt() on ruutjuure leidmise funktsioon
arv3 # see trükitakse välja
## [1] 27
Arvud võivad omakorda jaguneda täisarvudeks (integer
) ja
murdarvudeks/ujukomaarvudeks (double
). Murdarvus
kasutatakse R-is koma asemel punkti (nt 2.7
, mitte
2,7
)!
Tekst (character) tuleb kirjutada jutumärkides (kas ühe- või kahekordsetes). Ka numbreid võib esitada tekstina. Tekstiga matemaatilisi tehteid teha ei saa, küll aga saab eri funktsioonide abil näiteks tekstiosi omavahel kombineerida või tekstijada (ingl string) pikkust pärida.
## [1] "Tartu"
pärisnimi <- "Tartu" # objektile 'pärisnimi' omistatakse väärtus "Tartu", aga midagi välja ei trükita
üldnimi <- 'ülikool' # ühekordsed jutumärgid töötavad samaväärselt
arv <- "104" # objektile 'arv' omistatakse tekstiväärtus "104"
paste(pärisnimi, üldnimi, arv, sep= " ") # kleebime kolme objekti väärtused kokku (paste = kleebi)
## [1] "Tartu ülikool 104"
## [1] 7
## [1] "kool"
## Error in pärisnimi + üldnimi: non-numeric argument to binary operator
## Error in arv^2: non-numeric argument to binary operator
Küsimus R-i testist
Tõeväärtus (logical) on binaarne muutuja, millel on kaks võimalikku väärtust: TRUE ja FALSE, need sisestatakse suurtäheliselt ilma jutumärkideta, töötab ka ainult esitähega T/F.
Milleks tõeväärtusi vaja on?
Tõeväärtused saame vastuseks, kui testime, kas mingi tingimus on
täidetud. Tingimuste kontrolli läheb meil vaja siis, kui meil on näiteks
suuremast andmestikust vaja leida kindlatele tunnustele vastav alamosa
(näiteks võtta tabelist välja ainult read, kus tulbas Sugu
on väärtus mees, või read, kus tulbas Vanus
on
suurem väärtus kui 50). Tõeväärtustega saab ka matemaatilisi tehteid
teha.
üks <- 1 # objektile 'üks' omistatakse väärtus 1, midagi välja ei trükita
kaks <- 2
üks > kaks # Kas objekti 'üks' väärtus on suurem kui objekti 'kaks' väärtus?
## [1] FALSE
## [1] TRUE
## [1] FALSE
## [1] TRUE
## [1] TRUE
## [1] 1
## [1] 400
Lisaks on R-is oluline tundmatu väärtus ehk NA (not applicable, not available, no answer). Kõigi objektitüüpide hulgas võib olla tundmatuid väärtusi, näiteks kui me ei tea kõikide oma andmestiku katseisikute vanuseid, mõni mõõtmistulemus on läinud untsu või mõni kategooria pole üldse kõikide vaatluste puhul relevantne. Tundmatu väärtusega tehteid tehes on tulemuseks samuti tundmatu väärtus.
## [1] NA
## [1] TRUE
Objektide tüüpi saab küsida käsuga
mode()
või
class()
.
## [1] "numeric"
## [1] "numeric"
## [1] "character"
## [1] "character"
## [1] "logical"
## [1] "logical"
Samuti võib küsida, kas objekt on mingit konkreetset tüüpi.
## [1] TRUE
## [1] TRUE
## [1] TRUE
Loo üks objekt nimi
, millele omistad väärtuseks oma
eesnime, teine objekt vanus
, millele omistad väärtuseks oma
vanuse, ning kolmas objekt hinnang
, mis võib saada
väärtuseks ainult kas sõna juba või sõna alles.
Jooksuta seejärel allolevat paste()
käsku, et lasta R-il
sind sobivalt tutvustada.
Objektiklass tähistab andmestruktuuri ehk seda, kuidas andmed objektis on korrastatud. Objektiklasse on küll ka rohkem ja spetsiifilisemaid, aga esialgu võiks meil tulla tegemist 4 põhilise klassiga:
1
, 1:10
, c(1:10)
,
c(1,400,800)
, "Tere!"
,
c("Tere!", "Head aega!")
, TRUE
,
c(TRUE, FALSE, TRUE, TRUE)
,
vector("character", length = 10)
list(1:10)
, list(1:10, 10:5)
,
list(1:10, "a", list(c(TRUE, FALSE), TRUE))
matrix(1:9)
, matrix(1:9, nrow = 3)
,
matrix(c(TRUE, TRUE, FALSE, FALSE), ncol = 2)
data.frame(nimi = c("Anu", "Mart", "Sipsik"), pikkus = c(145, 160, 30), kaal = c(40, 58, 2))
,
as.data.frame(matrix(1:9, nrow = 3))
Vektorid on ühemõõtmelised objektid, mis võivad
sisaldada ainult üht tüüpi elemente, nt ainult arve, ainult teksti või
ainult tõeväärtuseid.
Maatriksid on kahemõõtmelised (= ridade ja tulpadega)
objektid, mis võivad sisaldada ainult üht tüüpi elemente, nt ainult
arve, ainult teksti või ainult tõeväärtuseid.
Tabelid on kahemõõtmelised objektid, mis võivad
veergudes sisaldada erinevat tüüpi elemente (nt tekstivektoreid,
arvuvektoreid, tõeväärtusvektoreid).
Listid on komplekssed, struktureerimata objektid, mis
võivad sisaldada erinevat tüüpi elemente, sh tabeleid ja teisi liste,
funktsioone jm.
Kõige rohkem pöörame sellel kursusel tähelepanu just vektoritele ja
tabelitele. Tabelite (ja maatriksite) puhul on oluline ära märkida, et
R-is peaks tabel olema kindlasti sümmeetriline, st igas
reas on ühepalju tulpasid ja igas tulbas ühepalju ridu (nn tidy
andmestruktuur). Selline Exceli-tüüpi tabel, kus ühe ruudulise lehe peal
võib olla mitu tabelit, on R-ile raskesti seeditav. Ka erinevad
stiliseeritud ja pesastatud tabelid, kus ühes lahtris toimub omakorda
jagunemine väiksemateks lahtriteks, võivad tekitada omajagu tüli (vt ka
nt https://www.r-bloggers.com/2020/05/what-it-takes-to-tidy-census-data/).
Keerulisema struktuuriga objektidega, nagu on R-is list, me täna ei
tegele, aga näeme neid rohkem siis, kui hakkame mudelite väljundeid
vaatama.
R-i põhiline objektiklass on vektor. Kõik teised objektid koosnevad vektoritest, st nende osi saab käsitleda vektoritena.
Vektor on ühemõõtmeline objekt, millel võib olla üks või enam üht tüüpi väärtust. Kõige lihtsam vektor koosnebki ainult ühest elemendist, st tal on üks väärtus. Näiteks kui sisestada üks arv või üks sõna, siis see on vektor, millel on üks element.
## [1] 4
## [1] 1
Vektoris võib olla ka rohkem kui üks väärtus. Funktsioon
c()
(concatenate) kombineerib
üksikud väärtused kokku vektoriks (erinevate väärtuste loendiks).
Järjestikuste arvude jada saab luua ka kooloniga.
Kui mõelda pisut etteruttavalt andmetabelite peale, siis põhimõtteliselt iga andmetabeli tulp, mis sidaldab üksikute vaatluste konkreetse tunnuse väärtusi (nt vanuseid), on sisuliselt üks vektor.
Proovi nüüd nende loodud vektorite peal funktsiooni
length()
, mis ütleb, mitu väärtust vektoris on.
Ühes vektoris on kõik elemendid sama tüüpi (nt
ainult arvud, ainult tekst, ainult loogilised väärtused). Vektori tüüpi
saab jällegi küsida käsuga mode()
või
class()
.
## [1] "numeric"
Kui püüda samasse vektorisse kokku panna eri tüüpe elemente, siis arvude ja loogiliste väärtuste kombineerimisel teisendatakse loogilised väärtused arvudeks (0 või 1), nende kombineerimisel tekstiga omakorda teisendatakse kõik elemendid tekstiks.
Küsimused R-i testist
Käsk c()
võib omavahel kokku kombineerida mitte ainult
mitu üksikut väärtust, vaid ka mitu mitmest elemendist koosnevat
vektorit.
## [1] 3 6 8 11 24 1 2 3 4 5 20 21 22 23 24 25 26 27 28 29 30
## [1] 21
Vektoritega tehete tegemisel rakendatakse tehet (nt liitmine) elementide kaupa. Kui vektorid on eri pikkusega, siis lühemat vektorit taaskasutatakse.
## [1] 4 8 11 15 29
## [1] 3 0 9 0 15 0 21 0 27 0
Ja kui pikem vektor ei jagu täpselt lühemaga, siis lühemat küll taaskasutatakse nii, et kõik pikema vektori elemendid saaksid endale paarilise, aga kõik lühema vektori elemendid ei saa võrdselt kordusi, mille kohta antakse ka hoiatus.
## Warning in 1:10 * c(3, 0, 1): longer object length is not a multiple of shorter
## object length
## [1] 3 0 3 12 0 6 21 0 9 30
Vektorist saab üksiku väärtuse või mingi osa kätte indeksite abil. Indeksid on tegelikult ise ka vektorid. Indeks kirjutatakse vektori nime järele nurksulgudesse:
tekstivektor2 <- c("kala", "kana", "kaja", "kava", "kaba", "kada", "kaka", "kaua", "kama")
tekstivektor2[3] # vektori kolmas element
## [1] "kaja"
## [1] "kana" "kaja" "kava"
## [1] "kaba" "kala"
Küsimus R-i testist
Omamoodi indeksitena saab kasutada ka võrratusi, mispuhul indeksitena kasutatav vektor on tõeväärtuste vektor.
## [1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
tekstivektor2[tekstivektor2 == "kana"] # küsi vektorist ainult neid elemente, mis võrduvad sõnaga "kana"
## [1] "kana"
## [1] FALSE FALSE FALSE TRUE TRUE
## [1] 11 24
Vektori eritüüp on faktor. Faktor (factor) on piiratud hulga väärtustega nominaalne vektor.
Miks faktoreid vaja on?
1) faktori väärtuseid saab järjestada, see on oluline näiteks
järjestusskaalaga muutujate puhul (“vana” > “keskealine” >
“noor”);
2) on arvutuslikult ökonoomsem, sest ehkki faktori taseme
(level) nimi võib koosneda mitmest tähemärgist (nt
noor, keskealine), on iga tase/klass tegelikult
kodeeritud unikaalse arvuga (nt 1, 2).
Faktori tasemed märgivad faktori unikaalseid väärtusi. Faktori
tasemed on alati mingil moel järjestatud, ent vaikimisi tähestiku
järjekorras või arvude puhul väiksemast suuremani. Faktori tasemeid saab
küsida käsuga levels()
.
haridus <- factor(c("põhi", "kesk", "põhi", "kesk", "kõrg"))
arvud <- factor(c(9,3,6,2,1,1,2,2))
levels(haridus)
## [1] "kesk" "kõrg" "põhi"
## [1] "1" "2" "3" "6" "9"
Küsimus R-i testist
Faktoreid saab ümber järjestada näiteks
factor()
-funktsioonis argumendi levels
abil.
haridus <- factor(haridus, levels = c("põhi", "kesk", "kõrg"))
arvud <- factor(arvud, levels = c(9,6,3,2,1))
levels(haridus)
## [1] "põhi" "kesk" "kõrg"
## [1] "9" "6" "3" "2" "1"
Kui vektorite puhul annavad käsud mode()
ja
class()
sama väljundi, siis keerukamate andmestruktuuride
puhul näeme nende kasutuses juba erinevusi. Näiteks faktorite puhul
ütleb class()
seda, milline on andmestruktuur,
mode()
aga seda, mis tüüpi andmetest see struktuur
koosneb.
## [1] "factor"
## [1] "numeric"
Eraldi faktori liik on järjestatud faktor (ordered factor), mille puhul on eksplitsiitne ka see, et iga järgmine faktori tase on eelmisest suurem/kõrgem/rohkem/tähtsam.
## [1] põhi kesk põhi kesk kõrg
## Levels: põhi < kesk < kõrg
## [1] "ordered" "factor"
## [1] "numeric"
Tabel on kahemõõtmeline objekt: on read ja veerud, aga oluline on see, et igas reas on sama palju veerge ja vastupidi, ehkki lahtrites võib olla ka puuduvaid väärtusi.
Siin kursusel kasutame kõige rohkem tabeleid, mille klass on data.frame, mingites olukordades ka maatriksit (matrix). Maatriksi ja data.frame’i vahe R-is on see, et maatriksis saab olla ainult ühte tüüpi andmeid (nt ainult arvud), aga data.frame’is võib iga tulp olla erinevat tüüpi.
matrix(20:28, # arvud, mis tabelisse lähevad
ncol = 3, # tulpade arv, millesse arvud jagatakse
dimnames = list(c("1", "2", "3"), # reanimed
c("Arvud1", "Arvud2", "Arvud3"))) # tulbanimed
## Arvud1 Arvud2 Arvud3
## 1 20 23 26
## 2 21 24 27
## 3 22 25 28
data.frame(Arvud = c(20,21,22), # esimese tulba nimi ja väärtused
Tekst = c("a", "b", "c"), # teise tulba nimi ja väärtused
Tõeväärtused = c(TRUE, FALSE, FALSE)) # kolmanda tulba nimi ja väärtused
## Arvud Tekst Tõeväärtused
## 1 20 a TRUE
## 2 21 b FALSE
## 3 22 c FALSE
Nagu näeme, saab R-is andmeid ka vektoritest
data.frame()
käsuga tabeliks kokku panna, aga üldjuhul
saame data.frame’i kujulise objekti nii, et loeme tabelina
struktureeritud andmeid mingist failist.
Kui andmestik on R-is korrastatud ja RData formaadis salvestatud,
siis neid andmestikke saab avada käsuga load()
. Näiteks
sellisel kujul on Moodle’is failis kysimustik_2024.RData
korrastatud vastused küsimustikule, mida eelmises praktikumis täitsite.
Lisaks on seal ka varasemate aastate vastused. Kui laadite RData
andmestiku alla ja panete selle oma kursuse andmestike kausta (nt kausta
nimega andmestikud
, andmed
, data
vmt).
Selle käsurea rakendamisest justkui ei juhtugi midagi, aga töölauale
tekkis objekt nimega kysimustik, mille klassiks on
data.frame
.
## [1] "data.frame"
Nüüd oleks vaja saada natuke aimu, mida see tabel endast kujutab. Selleks proovime käske:
dim()
View()
head()
tail()
summary()
str()
dim(kysimustik) # mitu rida ja mitu tulpa on tabelis?
View(kysimustik) # vaata tervet andmetabelit
head(kysimustik) # näita tabeli esimesi ridu
tail(kysimustik) # näita tabeli viimaseid ridu
summary(kysimustik) # näita ülevaadet tabeli tunnustest
str(kysimustik) # näita tabeli struktuuri
Kui andmetabel ei ole RData-formaadis (enamasti ei ole), saab selle
sisselugemiseks kasutada paljusid muid funktsioone, mis algavad üldjuhul
sõnaga read
. csv- või
txt-formaadis tabeleid saab lugeda näiteks järgmiste
käskudega, mis erinevad põhiliselt selle poolest, millised on erinevate
argumentide (nt header
, sep
)
vaikeväärtused:
kysimustik_csv <- read.table("data/kysimustik_2024.csv", header = TRUE, sep = "\t", encoding = "UTF-8")
kysimustik_csv <- read.delim("data/kysimustik_2024.csv", encoding = "UTF-8")
kysimustik_csv <- read.csv("data/kysimustik_2024.csv", sep = "\t", encoding = "UTF-8")
kysimustik_csv <- read.csv2("data/kysimustik_2024.csv", sep = "\t", encoding = "UTF-8")
Failil kysimustik_2024.csv
on tulbanimedega päis
(header
), tulpasid eraldavad tabulaatorid (\t
)
ning faili kodeering on UTF-8. Kuna funktsioonide vaikeväärtused on
erinevad (näiteks read.table()
eeldab vaikimisi, et tabelil
ei ole tulbanimesid), peame eri funktsioonidega andmeid sisse lugedes
täpsustama erinevaid asju, vastavalt oma andmestiku struktuurile.
Küsimused R-i testist
R-i saab erinevate pakettide abil laadida ka muus formaadis faile, näiteks Exceli, SPSSi, SASi, STATA, JSONi või XMLi faile.
# Exceli failid
# install.packages("readxl")
library(readxl)
kysimustik_xlsx <- read_excel("data/kysimustik_2024.xlsx")
# SPSSi, SASi, STATA failid
# install.packages("haven")
library(haven)
kysimustik_sav <- read_sav("data/kysimustik_2024.sav") # SPSS
kysimustik_sas7bdat <- read_sas("data/kysimustik_2024.sas7bdat") # SAS
kysimustik_dta <- read_stata("data/kysimustik_2024.dta") # STATA
# JSONi fail
# install.packages("jsonlite")
library(jsonlite)
kysimustik_json <- fromJSON("data/kysimustik_2024.json")
# XMLi fail
# install.packages("xml2")
library(xml2)
kysimustik_xml <- as.data.frame(read_xml("data/kysimustik_2024.xml"))
Tabelist saab selle osi pärida samamoodi indeksite abil nagu vektorist, aga nüüd peab arvestama, et nurksulgudes tuleb märkida nii ridade kui ka veergude indeksid. Ridade indekseid täpsustame kantsulgude sees enne koma ja tulpade indekseid pärast koma.
kysimustik[1,] # küsimustiku 1. rida
kysimustik[c(1,3,5,7),] # küsimustiku 1., 3., 5. ja 7. rida
kysimustik[,5] # küsimustiku 5. tulp
kysimustik[,1:2] # küsimustiku 1. ja 2. tulp
kysimustik[3, 5] # küsimustiku 3. rea 5. tulba väärtus
kysimustik[1:10, 5] # küsimustiku esimese 10 rea 5. tulba väärtused
Kui me tahame tabelist nime järgi välja võtta ühe terve tulba, siis seda saab ka nii:
## [1] Kohv Kohv Kohv Kohv Kohv Kohv Tee Tee Kohv Kohv Tee Tee Tee Tee Tee
## [16] Tee Kohv Tee Tee Kohv Tee Kohv Kohv Tee Kohv Tee Kohv Tee Tee Tee
## [31] Tee Tee Kohv Tee Kohv Tee Kohv Tee Kohv Kohv Kohv Tee Kohv Kohv Tee
## [46] Tee Kohv Kohv Kohv Kohv Tee Tee Kohv Tee Kohv Kohv Kohv Tee Kohv Kohv
## [61] Kohv Kohv Tee Tee Kohv Kohv Tee Kohv Kohv Kohv Kohv Kohv Kohv Tee Kohv
## [76] Kohv Kohv Kohv Kohv Kohv Tee Kohv Tee Kohv Kohv Tee Kohv Kohv Tee Kohv
## [91] Kohv Tee Tee Tee Kohv Tee Kohv Kohv Tee Kohv Tee Kohv Tee Kohv
## Levels: Kohv Tee
## [1] Kohv Kohv Kohv Kohv Kohv Kohv Tee Tee Kohv Kohv Tee Tee Tee Tee Tee
## [16] Tee Kohv Tee Tee Kohv Tee Kohv Kohv Tee Kohv Tee Kohv Tee Tee Tee
## [31] Tee Tee Kohv Tee Kohv Tee Kohv Tee Kohv Kohv Kohv Tee Kohv Kohv Tee
## [46] Tee Kohv Kohv Kohv Kohv Tee Tee Kohv Tee Kohv Kohv Kohv Tee Kohv Kohv
## [61] Kohv Kohv Tee Tee Kohv Kohv Tee Kohv Kohv Kohv Kohv Kohv Kohv Tee Kohv
## [76] Kohv Kohv Kohv Kohv Kohv Tee Kohv Tee Kohv Kohv Tee Kohv Kohv Tee Kohv
## [91] Kohv Tee Tee Tee Kohv Tee Kohv Kohv Tee Kohv Tee Kohv Tee Kohv
## Levels: Kohv Tee
See üks tulp on tegelikult ka vektor. Tulba või üksikud väärtused saab suunata ka eraldi uude objekti, tulba väärtusi omakorda indeksite abil välja võtta jne.
Nii nagu vektoreid võib ka tabelitest elemente (ridu või tulpasid) välja võtta ka võrratuste abil.
## synniaasta oppekava kaua_opid kogemused_kvant
## 42 2000 semiootika ja kultuuriteooria 2 Jah
## 48 2001 filosoofia 1 Ei
## 52 2000 eesti ja soome-ugri keeleteadus 3 Jah
## 55 2001 eesti ja soome-ugri keeleteadus 1 Jah
## 58 2000 ajalugu 3 Jah
## 65 2000 inglise keel 2 Ei
## 66 2001 usuteadus 3 Jah
## 68 2001 ajalugu 2 Ei
## 78 2002 matemaatiline statistika 1 Jah
## 181 2001 inglise keel 2 Jah
## 191 2000 filosoofia 2 Ei
## 110 2003 inglise keel 3 Jah
## 210 2001 keeleteadus 3 Jah
## 310 2001 inglise keel 3 Jah
## 410 2001 geenitehnoloogia 3 Jah
## 610 2000 euroopa keeled ja kultuurid 4 Jah
## 710 2002 inglise keel 3 Jah
## 111 2000 inglise keel 3 Jah
## 121 2000 ajalugu 4 Ei
## 141 2001 romanistika 3 Ei
## 151 2001 ajalugu 3 Jah
## 161 2000 keeleteadus 4 Ei
## 171 2001 keeleteadus 4 Ei
## 211 2000 keeleteadus 4 Jah
## 221 2001 ajalugu 2 Ei
## programmeerimisoskus
## 42 Saan mingid asjad tehtud
## 48 Saan mingid asjad tehtud
## 52 Saan mingid asjad tehtud
## 55 Saan mingid asjad tehtud
## 58 Saan mingid asjad tehtud
## 65 Saan mingid asjad tehtud
## 66 Olen püüdnud õppida, aga külge pole palju jäänud
## 68 Saan mingid asjad tehtud
## 78 a='dream';b='I';c='code';d='in';while(TRUE){cat(b,a,d,c,'\\n')}
## 181 a='dream';b='I';c='code';d='in';while(TRUE){cat(b,a,d,c,'\\n')}
## 191 a='dream';b='I';c='code';d='in';while(TRUE){cat(b,a,d,c,'\\n')}
## 110 Saan mingid asjad tehtud
## 210 Olen püüdnud õppida, aga külge pole palju jäänud
## 310 Saan mingid asjad tehtud
## 410 Saan mingid asjad tehtud
## 610 Saan mingid asjad tehtud
## 710 Olen püüdnud õppida, aga külge pole palju jäänud
## 111 Saan mingid asjad tehtud
## 121 Puuduvad
## 141 Olen püüdnud õppida, aga külge pole palju jäänud
## 151 Saan mingid asjad tehtud
## 161 Saan mingid asjad tehtud
## 171 Olen püüdnud õppida, aga külge pole palju jäänud
## 211 Saan mingid asjad tehtud
## 221 Saan mingid asjad tehtud
## kursuse_labimine lemmikjook soogitegemisoskus lemmikloom aasta
## 42 5 Tee 3 Kaelkirjak 2021
## 48 4 Kohv 5 Kaelkirjak 2022
## 52 5 Tee 2 Koer 2022
## 55 5 Kohv 3 Glaucus atlanticus 2022
## 58 5 Tee 2 Kaelkirjak 2022
## 65 5 Kohv 3 Koer 2023
## 66 4 Kohv 3 Kaelkirjak 2023
## 68 4 Kohv 3 Glaucus atlanticus 2023
## 78 4 Kohv 1 Koer 2023
## 181 4 Tee 4 Koer 2023
## 191 5 Kohv 3 Koer 2023
## 110 4 Tee 4 Koer 2024
## 210 4 Kohv 3 Kaelkirjak 2024
## 310 4 Kohv 4 Koer 2024
## 410 4 Tee 3 Koer 2024
## 610 5 Kohv 3 Koer 2024
## 710 4 Tee 3 Kaelkirjak 2024
## 111 5 Tee 4 Glaucus atlanticus 2024
## 121 2 Tee 4 Kaelkirjak 2024
## 141 3 Tee 4 Kaelkirjak 2024
## 151 4 Kohv 3 Koer 2024
## 161 5 Kohv 3 Glaucus atlanticus 2024
## 171 5 Tee 4 Kaelkirjak 2024
## 211 5 Tee 2 Glaucus atlanticus 2024
## 221 4 Kohv 3 Kaelkirjak 2024
# vektor
kysimustik[kysimustik$kogemused_kvant == "Jah",]$kaua_opid # "kaua_opid" tulba väärtused ridadel, kus "kogemused_kvant" väärtus on "Jah"
## [1] 10 6 5 25 9 4 6 4 5 8 12 1 4 7 8 6 15 7 10 4 16 3 5 5 13
## [26] 8 2 2 1 2 3 13 3 1 7 1 5 3 4 2 7 3 13 3 5 13 10 6 18 13
## [51] 14 1 7 8 2 3 3 3 3 8 4 3 15 7 2 3 7 3 8 4
kysimustik
välja mõni
intervalliskaalal tunnus/tulp (kasuta arvulist indeksit).kysimustik
välja sama tulp tulbanime
järgi (kasuta $-märki).kysimustik
tulp
kogemused_kvant
eraldi objekti nimega
kogemused
. Mis tüüpi objekti saad?kogemused
tasemed nii, et esimene tase
oleks “Jah” ja teine “Ei”.kogemused
väärtus “Võib-olla” (kasuta
funktsiooni c()
). Mis juhtub?Kui sul on tunne, et vajad pikemat sissejuhatust R-i alustesse, siis vaata sissejuhatava kursuse materjale või uuri R-i paketti Swirl.
Järgmises praktikumis arvulised andmed ja nende visualiseerimine.
c()
- concatenate, kombineerib üksikud
väärtused või mitmest elemendist koosnevad vektorid üheks vektoriksclass()
- küsib objekti andmestruktuuri/andmetüüpidata.frame()
- kombineerib üksikud vektorid või
maatriksid kokku andmetabeliksdim()
- küsib kahemõõtmelise R-i objekti (maatriksi või
tabeli) ridade ja tulpade arvufactor()
- teeb tavalisest vektorist piiratud hulga
väärtustega faktorihead()
- kuvab R-i objekti esimesi elemente
(andmetabelis nt vaikimisi esimest 6 rida)is.character()
- küsib, kas objekti andmetüüp on
tekstis.logical()
- küsib, kas objekti andmetüüp on
loogiline väärtusis.numeric()
- küsib, kas objekti andmetüüp on
arvlength()
- küsib, mitu elementi vektoris on. Kui
kasutada data.frame’il, siis annab tabeli tulpade arvulevels()
- küsib, millised on faktori tasemed ehk
unikaalsed väärtusedlist()
- teeb listi või muudab olemasoleva(d)
objekti(d) listiksload()
- laadib RData formaadis salvestatud
andmestikkematrix()
- teeb maatriksi või muudab olemasoleva(d)
objekti(d) (nt vektori(d)) maatriksiksmode()
- küsib objekti andmetüüpipaste()
- kleebib üksikud väärtused või vektorid kokku
üheks tekstijadaks (string’iks)read.csv()
- loeb failist (nt) txt- või csv-formaadis
andmetabeliread.csv2()
- loeb failist (nt) txt- või csv-formaadis
andmetabeliread.delim()
- loeb failist (nt) txt- või csv-formaadis
andmetabeliread.table()
- loeb failist (nt) txt- või csv-formaadis
andmetabelisummary()
- annab R-i objektist ülevaate (andmetabelite
puhul nt kõikide tunnuste/tulpade kokkuvõtted)str()
- kuvab R-i objekti sisemise struktuuri ja
struktuuris kasutatavad andmetüübidtail()
- kuvab R-i objekti viimaseid elemente
(andmetabelis nt vaikimisi viimast 6 rida)vector()
- teeb vektoriView()
- kuvab andmetabeli eraldi vaates