Globálne nastavenie Chunkov
knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)
Numerické hodnoty
Simulácia náhodných dát
set.seed(42)
data <- rnorm(100, mean = 50, sd = 10) # 100 náhodných hodnôt ~ N(50,10)
summary(data) # základné štatistiky
Min. 1st Qu. Median Mean 3rd Qu. Max.
20.07 43.83 50.90 50.33 56.62 72.87
hist(data, main="Histogram hodnôt", col="purple")

Malé cvičenie
Vytvorte 50 náhodných hodnôt z rovnomerného rozdelenia na intervale
[10, 20] a spočítajte, koľko z nich je väčších ako 15.
Riešenie:
set.seed(123)
u <- runif(50, min = 10, max = 20)
sum(u > 15)
[1] 25
Logické hodnoty
vek <- c(15, 18, 25, 70, 12, 40)
vek >= 18
[1] FALSE TRUE TRUE TRUE FALSE TRUE
sum(vek >= 18) # počet dospelých
[1] 4
Malé cvičenie
Napíšte podmienku, ktorá určí, ktorí ľudia majú medzi 18 a 65 rokmi
(t.j. sú v produktívnom veku).
Riešenie:
vek <- c(15, 18, 25, 70, 12, 40)
produkt_vek <- vek >= 18 & vek <= 65
vek[produkt_vek]
[1] 18 25 40
Textové reťazce
Práca so slovami
veticka <- "Programovanie v R je veľmi flexibilné a zábavné"
slova <- strsplit(veticka, " ")[[1]]
length(slova) # počet slov
[1] 8
toupper(slova) # všetky slová veľkými písmenami
[1] "PROGRAMOVANIE" "V" "R" "JE"
[5] "VEĽMI" "FLEXIBILNÉ" "A" "ZÁBAVNÉ"
grep("R", slova) # pozícia slova "R"
[1] 3
Malé cvičenie
Napíšte vetu podľa seba a:
1. rozdeľte ju na slová,
2. spočítajte počet písmen vo všetkých slovách dokopy,
3. vymeňte jedno slovo za iné pomocou gsub().
Riešenie:
moj_text <- "Učenie R Markdown je veľmi užitočné a zaujímavé"
slova2 <- strsplit(moj_text, " ")[[1]]
# 1. rozdelenie
slova2
[1] "Učenie" "R" "Markdown" "je" "veľmi"
[6] "užitočné" "a" "zaujímavé"
# 2. počet písmen dokopy
sum(nchar(slova2))
[1] 40
# 3. zmena slova "užitočné" na "praktické"
novy_text <- gsub("užitočné", "praktické", moj_text)
novy_text
[1] "Učenie R Markdown je veľmi praktické a zaujímavé"
Môj návrh použitia novinky
Vytvoríme vlastnú funkciu, ktorá z textu spraví
štatistiku slov:
analyzuj_text <- function(txt) {
slova <- strsplit(txt, " ")[[1]]
dlzky <- nchar(slova)
list(
pocet_slov = length(slova),
priemerna_dlzka = mean(dlzky),
najdlhsie_slovo = slova[which.max(dlzky)]
)
}
analyzuj_text("Dnes sa učíme programovať v jazyku R Markdown")
$pocet_slov
[1] 8
$priemerna_dlzka
[1] 4.75
$najdlhsie_slovo
[1] "programovať"
Numerické vektory
Generovanie vektorov
a <- seq(5, 25, by = 5)
b <- rep(2, times = 5)
c <- runif(6, min = 0, max = 10)
d <- rnorm(5, mean = 100, sd = 15)
a; b; c; d
[1] 5 10 15 20 25
[1] 2 2 2 2 2
[1] 0.4583117 4.4220007 7.9892485 1.2189926 5.6094798 2.0653139
[1] 82.92795 118.80722 106.39696 95.57393 113.42688
Malé cvičenie 1
Vytvorte vektor temp obsahujúci denné teploty (v
stupňoch C) za týždeň: 12, 14, 15, 11, 9, 8, 10.
Zistite: - priemernú teplotu,
- maximálnu teplotu,
- ktoré dni mali teplotu nižšiu ako priemer.
temp <- c(12, 14, 15, 11, 9, 8, 10)
mean(temp)
[1] 11.28571
[1] 15
[1] 11 9 8 10
Malé cvičenie 2
Vytvorte vektor sales s hodnotami: 150, 200, 170, 220,
190.
Spočítajte: - celkový predaj,
- percentuálny podiel každého dňa na celkovom predaji.
sales <- c(150, 200, 170, 220, 190)
sum(sales)
[1] 930
round(sales / sum(sales) * 100, 2)
[1] 16.13 21.51 18.28 23.66 20.43
Matice
Vytvorenie matíc
M <- matrix(1:12, nrow = 3, byrow = TRUE)
M
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
Malé cvičenie 3
Vytvorte maticu grades (3x4), kde riadky reprezentujú
študentov a stĺpce ich známky z testov:
1. študent: 78, 85, 90, 88
2. študent: 92, 81, 77, 95
3. študent: 85, 89, 91, 87
Zistite priemerné skóre každého študenta (po riadkoch) a priemerné
hodnotenie z každého testu (po stĺpcoch).
grades <- matrix(c(78,85,90,88, 92,81,77,95, 85,89,91,87), nrow = 3, byrow = TRUE)
grades
[,1] [,2] [,3] [,4]
[1,] 78 85 90 88
[2,] 92 81 77 95
[3,] 85 89 91 87
[1] 85.25 86.25 88.00
[1] 85 85 86 90
Malé cvičenie 4
Vytvorte maticu A (3x3) s hodnotami 2..10 po riadkoch a
spočítajte: - determinant matice,
- transpozíciu,
- súčin \(A^T A\).
A <- matrix(2:10, nrow = 3, byrow = TRUE)
det(A)
[1] 0
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 3 6 9
[3,] 4 7 10
[,1] [,2] [,3]
[1,] 93 108 123
[2,] 108 126 144
[3,] 123 144 165
Malé cvičenie 5
Vytvorte maticu B rozmeru 4x4 s hodnotami od 10 do 25 po
stĺpcoch.
Zistite súčet všetkých hodnôt väčších ako 18 a počet prvkov menších ako
15.
B <- matrix(10:25, nrow = 4)
sum(B[B > 18])
[1] 154
[1] 5
LS0tCnRpdGxlOiAiWsOha2xhZG7DqSBvcGVyw6FjaWUgdiBSIgphdXRob3I6ICJNw6FyaWEgTWF0w7rFoW92w6EiCmRhdGU6ICJTZXB0ZW1iZXIgMjAyNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiBrYXRlCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkCmVkaXRvcl9vcHRpb25zOgogIG1hcmtkb3duOgogICAgd3JhcDogNzIKLS0tCgojIEdsb2LDoWxuZSBuYXN0YXZlbmllIENodW5rb3YKCmBgYHtyIHNldHVwLCBpbmNsdWRlPVRSVUUsIGVjaG89VFJVRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLAogIG1lc3NhZ2UgPSBGQUxTRSwKICB3YXJuaW5nID0gRkFMU0UKKQpgYGAKCi0tLQoKIyBOdW1lcmlja8OpIGhvZG5vdHkgCgojIyBTaW11bMOhY2lhIG7DoWhvZG7DvWNoIGTDoXQKCmBgYHtyfQpzZXQuc2VlZCg0MikKZGF0YSA8LSBybm9ybSgxMDAsIG1lYW4gPSA1MCwgc2QgPSAxMCkgICMgMTAwIG7DoWhvZG7DvWNoIGhvZG7DtHQgfiBOKDUwLDEwKQoKc3VtbWFyeShkYXRhKSAgICAjIHrDoWtsYWRuw6kgxaF0YXRpc3Rpa3kKaGlzdChkYXRhLCBtYWluPSJIaXN0b2dyYW0gaG9kbsO0dCIsIGNvbD0icHVycGxlIikKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKVnl0dm9ydGUgNTAgbsOhaG9kbsO9Y2ggaG9kbsO0dCB6IHJvdm5vbWVybsOpaG8gcm96ZGVsZW5pYSBuYSBpbnRlcnZhbGUgWzEwLCAyMF0gYSBzcG/EjcOtdGFqdGUsIGtvxL5rbyB6IG5pY2ggamUgdsOkxI3FocOtY2ggYWtvIDE1LgoKKipSaWXFoWVuaWU6KioKYGBge3J9CnNldC5zZWVkKDEyMykKdSA8LSBydW5pZig1MCwgbWluID0gMTAsIG1heCA9IDIwKQpzdW0odSA+IDE1KQpgYGAKCi0tLQoKIyBMb2dpY2vDqSBob2Rub3R5IAoKYGBge3J9CnZlayA8LSBjKDE1LCAxOCwgMjUsIDcwLCAxMiwgNDApCnZlayA+PSAxOApzdW0odmVrID49IDE4KSAgICMgcG/EjWV0IGRvc3BlbMO9Y2gKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKTmFww63FoXRlIHBvZG1pZW5rdSwga3RvcsOhIHVyxI3DrSwga3RvcsOtIMS+dWRpYSBtYWrDuiBtZWR6aSAxOCBhIDY1IHJva21pICh0LmouIHPDuiB2IHByb2R1a3TDrXZub20gdmVrdSkuCgoqKlJpZcWhZW5pZToqKgpgYGB7cn0KdmVrIDwtIGMoMTUsIDE4LCAyNSwgNzAsIDEyLCA0MCkKcHJvZHVrdF92ZWsgPC0gdmVrID49IDE4ICYgdmVrIDw9IDY1CnZla1twcm9kdWt0X3Zla10KYGBgCgotLS0KCiMgVGV4dG92w6kgcmXFpWF6Y2UKCiMjIFByw6FjYSBzbyBzbG92YW1pCgpgYGB7cn0KdmV0aWNrYSA8LSAiUHJvZ3JhbW92YW5pZSB2IFIgamUgdmXEvm1pIGZsZXhpYmlsbsOpIGEgesOhYmF2bsOpIgpzbG92YSA8LSBzdHJzcGxpdCh2ZXRpY2thLCAiICIpW1sxXV0KbGVuZ3RoKHNsb3ZhKSAgICAgICAgIyBwb8SNZXQgc2xvdgp0b3VwcGVyKHNsb3ZhKSAgICAgICAjIHbFoWV0a3kgc2xvdsOhIHZlxL5rw71taSBww61zbWVuYW1pCmdyZXAoIlIiLCBzbG92YSkgICAgICMgcG96w61jaWEgc2xvdmEgIlIiCmBgYAoKIyMgTWFsw6kgY3ZpxI1lbmllCk5hcMOtxaF0ZSB2ZXR1IHBvZMS+YSBzZWJhIGE6ICAKMS4gcm96ZGXEvnRlIGp1IG5hIHNsb3bDoSwgIAoyLiBzcG/EjcOtdGFqdGUgcG/EjWV0IHDDrXNtZW4gdm8gdsWhZXRrw71jaCBzbG92w6FjaCBkb2tvcHksICAKMy4gdnltZcWIdGUgamVkbm8gc2xvdm8gemEgaW7DqSBwb21vY291IGBnc3ViKClgLgoKKipSaWXFoWVuaWU6KioKYGBge3J9Cm1val90ZXh0IDwtICJVxI1lbmllIFIgTWFya2Rvd24gamUgdmXEvm1pIHXFvml0b8SNbsOpIGEgemF1asOtbWF2w6kiCnNsb3ZhMiA8LSBzdHJzcGxpdChtb2pfdGV4dCwgIiAiKVtbMV1dCiMgMS4gcm96ZGVsZW5pZQpzbG92YTIKIyAyLiBwb8SNZXQgcMOtc21lbiBkb2tvcHkKc3VtKG5jaGFyKHNsb3ZhMikpCiMgMy4gem1lbmEgc2xvdmEgInXFvml0b8SNbsOpIiBuYSAicHJha3RpY2vDqSIKbm92eV90ZXh0IDwtIGdzdWIoInXFvml0b8SNbsOpIiwgInByYWt0aWNrw6kiLCBtb2pfdGV4dCkKbm92eV90ZXh0CmBgYAoKLS0tCgojIE3DtGogbsOhdnJoIHBvdcW+aXRpYSBub3Zpbmt5CgpWeXR2b3LDrW1lICoqdmxhc3Ruw7ogZnVua2NpdSoqLCBrdG9yw6EgeiB0ZXh0dSBzcHJhdsOtIMWhdGF0aXN0aWt1IHNsb3Y6CgpgYGB7cn0KYW5hbHl6dWpfdGV4dCA8LSBmdW5jdGlvbih0eHQpIHsKICBzbG92YSA8LSBzdHJzcGxpdCh0eHQsICIgIilbWzFdXQogIGRsemt5IDwtIG5jaGFyKHNsb3ZhKQogIGxpc3QoCiAgICBwb2NldF9zbG92ID0gbGVuZ3RoKHNsb3ZhKSwKICAgIHByaWVtZXJuYV9kbHprYSA9IG1lYW4oZGx6a3kpLAogICAgbmFqZGxoc2llX3Nsb3ZvID0gc2xvdmFbd2hpY2gubWF4KGRsemt5KV0KICApCn0KCmFuYWx5enVqX3RleHQoIkRuZXMgc2EgdcSNw61tZSBwcm9ncmFtb3ZhxaUgdiBqYXp5a3UgUiBNYXJrZG93biIpCmBgYAoKLS0tCgojIE51bWVyaWNrw6kgdmVrdG9yeQoKIyMgR2VuZXJvdmFuaWUgdmVrdG9yb3YKCmBgYHtyfQphIDwtIHNlcSg1LCAyNSwgYnkgPSA1KQpiIDwtIHJlcCgyLCB0aW1lcyA9IDUpCmMgPC0gcnVuaWYoNiwgbWluID0gMCwgbWF4ID0gMTApCmQgPC0gcm5vcm0oNSwgbWVhbiA9IDEwMCwgc2QgPSAxNSkKYTsgYjsgYzsgZApgYGAKCiMjIE1hbMOpIGN2acSNZW5pZSAxCgo+IFZ5dHZvcnRlIHZla3RvciBgdGVtcGAgb2JzYWh1asO6Y2kgZGVubsOpIHRlcGxvdHkgKHYgc3R1cMWIb2NoIEMpIHphIHTDvcW+ZGXFiDogMTIsIDE0LCAxNSwgMTEsIDksIDgsIDEwLiAgCj4gWmlzdGl0ZToKPiAtIHByaWVtZXJuw7ogdGVwbG90dSwgIAo+IC0gbWF4aW3DoWxudSB0ZXBsb3R1LCAgCj4gLSBrdG9yw6kgZG5pIG1hbGkgdGVwbG90dSBuacW+xaFpdSBha28gcHJpZW1lci4KCmBgYHtyfQp0ZW1wIDwtIGMoMTIsIDE0LCAxNSwgMTEsIDksIDgsIDEwKQptZWFuKHRlbXApCm1heCh0ZW1wKQp0ZW1wW3RlbXAgPCBtZWFuKHRlbXApXQpgYGAKCi0tLQoKIyMgTWFsw6kgY3ZpxI1lbmllIDIKCj4gVnl0dm9ydGUgdmVrdG9yIGBzYWxlc2AgcyBob2Rub3RhbWk6IDE1MCwgMjAwLCAxNzAsIDIyMCwgMTkwLiAgCj4gU3BvxI3DrXRhanRlOgo+IC0gY2Vsa292w70gcHJlZGFqLCAgCj4gLSBwZXJjZW50dcOhbG55IHBvZGllbCBrYcW+ZMOpaG8gZMWIYSBuYSBjZWxrb3ZvbSBwcmVkYWppLgoKYGBge3J9CnNhbGVzIDwtIGMoMTUwLCAyMDAsIDE3MCwgMjIwLCAxOTApCnN1bShzYWxlcykKcm91bmQoc2FsZXMgLyBzdW0oc2FsZXMpICogMTAwLCAyKQpgYGAKCi0tLQoKIyBNYXRpY2UKCiMjIFZ5dHZvcmVuaWUgbWF0w61jCgpgYGB7cn0KTSA8LSBtYXRyaXgoMToxMiwgbnJvdyA9IDMsIGJ5cm93ID0gVFJVRSkKTQpgYGAKCiMjIE1hbMOpIGN2acSNZW5pZSAzCgo+IFZ5dHZvcnRlIG1hdGljdSBgZ3JhZGVzYCAoM3g0KSwga2RlIHJpYWRreSByZXByZXplbnR1asO6IMWhdHVkZW50b3YgYSBzdMS6cGNlIGljaCB6bsOhbWt5IHogdGVzdG92OiAgCj4gMS4gxaF0dWRlbnQ6IDc4LCA4NSwgOTAsIDg4ICAKPiAyLiDFoXR1ZGVudDogOTIsIDgxLCA3NywgOTUgIAo+IDMuIMWhdHVkZW50OiA4NSwgODksIDkxLCA4NyAgCj4KPiBaaXN0aXRlIHByaWVtZXJuw6kgc2vDs3JlIGthxb5kw6lobyDFoXR1ZGVudGEgKHBvIHJpYWRrb2NoKSBhIHByaWVtZXJuw6kgaG9kbm90ZW5pZSB6IGthxb5kw6lobyB0ZXN0dSAocG8gc3TEunBjb2NoKS4KCmBgYHtyfQpncmFkZXMgPC0gbWF0cml4KGMoNzgsODUsOTAsODgsIDkyLDgxLDc3LDk1LCA4NSw4OSw5MSw4NyksIG5yb3cgPSAzLCBieXJvdyA9IFRSVUUpCmdyYWRlcwpyb3dNZWFucyhncmFkZXMpCmNvbE1lYW5zKGdyYWRlcykKYGBgCgotLS0KCiMjIE1hbMOpIGN2acSNZW5pZSA0Cgo+IFZ5dHZvcnRlIG1hdGljdSBgQWAgKDN4MykgcyBob2Rub3RhbWkgMi4uMTAgcG8gcmlhZGtvY2ggYSBzcG/EjcOtdGFqdGU6Cj4gLSBkZXRlcm1pbmFudCBtYXRpY2UsICAKPiAtIHRyYW5zcG96w61jaXUsICAKPiAtIHPDusSNaW4gXCggQV5UIEEgXCkuCgpgYGB7cn0KQSA8LSBtYXRyaXgoMjoxMCwgbnJvdyA9IDMsIGJ5cm93ID0gVFJVRSkKZGV0KEEpCnQoQSkKdChBKSAlKiUgQQpgYGAKCi0tLQoKIyMgTWFsw6kgY3ZpxI1lbmllIDUKCj4gVnl0dm9ydGUgbWF0aWN1IGBCYCByb3ptZXJ1IDR4NCBzIGhvZG5vdGFtaSBvZCAxMCBkbyAyNSBwbyBzdMS6cGNvY2guICAKPiBaaXN0aXRlIHPDusSNZXQgdsWhZXRrw71jaCBob2Ruw7R0IHbDpMSNxaHDrWNoIGFrbyAxOCBhIHBvxI1ldCBwcnZrb3YgbWVuxaHDrWNoIGFrbyAxNS4KCmBgYHtyfQpCIDwtIG1hdHJpeCgxMDoyNSwgbnJvdyA9IDQpCnN1bShCW0IgPiAxOF0pCnN1bShCIDwgMTUpCmBgYAo=