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
max(temp)
[1] 15
temp[temp < mean(temp)]
[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
rowMeans(grades)
[1] 85.25 86.25 88.00
colMeans(grades)
[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
t(A)
     [,1] [,2] [,3]
[1,]    2    5    8
[2,]    3    6    9
[3,]    4    7   10
t(A) %*% A
     [,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
sum(B < 15)
[1] 5
LS0tCnRpdGxlOiAiWsOha2xhZG7DqSBvcGVyw6FjaWUgdiBSIgphdXRob3I6ICJNw6FyaWEgTWF0w7rFoW92w6EiCmRhdGU6ICJTZXB0ZW1iZXIgMjAyNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiBrYXRlCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkCmVkaXRvcl9vcHRpb25zOgogIG1hcmtkb3duOgogICAgd3JhcDogNzIKLS0tCgojIEdsb2LDoWxuZSBuYXN0YXZlbmllIENodW5rb3YKCmBgYHtyIHNldHVwLCBpbmNsdWRlPVRSVUUsIGVjaG89VFJVRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLAogIG1lc3NhZ2UgPSBGQUxTRSwKICB3YXJuaW5nID0gRkFMU0UKKQpgYGAKCi0tLQoKIyBOdW1lcmlja8OpIGhvZG5vdHkgCgojIyBTaW11bMOhY2lhIG7DoWhvZG7DvWNoIGTDoXQKCmBgYHtyfQpzZXQuc2VlZCg0MikKZGF0YSA8LSBybm9ybSgxMDAsIG1lYW4gPSA1MCwgc2QgPSAxMCkgICMgMTAwIG7DoWhvZG7DvWNoIGhvZG7DtHQgfiBOKDUwLDEwKQoKc3VtbWFyeShkYXRhKSAgICAjIHrDoWtsYWRuw6kgxaF0YXRpc3Rpa3kKaGlzdChkYXRhLCBtYWluPSJIaXN0b2dyYW0gaG9kbsO0dCIsIGNvbD0icHVycGxlIikKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKVnl0dm9ydGUgNTAgbsOhaG9kbsO9Y2ggaG9kbsO0dCB6IHJvdm5vbWVybsOpaG8gcm96ZGVsZW5pYSBuYSBpbnRlcnZhbGUgWzEwLCAyMF0gYSBzcG/EjcOtdGFqdGUsIGtvxL5rbyB6IG5pY2ggamUgdsOkxI3FocOtY2ggYWtvIDE1LgoKKipSaWXFoWVuaWU6KioKYGBge3J9CnNldC5zZWVkKDEyMykKdSA8LSBydW5pZig1MCwgbWluID0gMTAsIG1heCA9IDIwKQpzdW0odSA+IDE1KQpgYGAKCi0tLQoKIyBMb2dpY2vDqSBob2Rub3R5IAoKYGBge3J9CnZlayA8LSBjKDE1LCAxOCwgMjUsIDcwLCAxMiwgNDApCnZlayA+PSAxOApzdW0odmVrID49IDE4KSAgICMgcG/EjWV0IGRvc3BlbMO9Y2gKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKTmFww63FoXRlIHBvZG1pZW5rdSwga3RvcsOhIHVyxI3DrSwga3RvcsOtIMS+dWRpYSBtYWrDuiBtZWR6aSAxOCBhIDY1IHJva21pICh0LmouIHPDuiB2IHByb2R1a3TDrXZub20gdmVrdSkuCgoqKlJpZcWhZW5pZToqKgpgYGB7cn0KdmVrIDwtIGMoMTUsIDE4LCAyNSwgNzAsIDEyLCA0MCkKcHJvZHVrdF92ZWsgPC0gdmVrID49IDE4ICYgdmVrIDw9IDY1CnZla1twcm9kdWt0X3Zla10KYGBgCgotLS0KCiMgVGV4dG92w6kgcmXFpWF6Y2UKCiMjIFByw6FjYSBzbyBzbG92YW1pCgpgYGB7cn0KdmV0aWNrYSA8LSAiUHJvZ3JhbW92YW5pZSB2IFIgamUgdmXEvm1pIGZsZXhpYmlsbsOpIGEgesOhYmF2bsOpIgpzbG92YSA8LSBzdHJzcGxpdCh2ZXRpY2thLCAiICIpW1sxXV0KbGVuZ3RoKHNsb3ZhKSAgICAgICAgIyBwb8SNZXQgc2xvdgp0b3VwcGVyKHNsb3ZhKSAgICAgICAjIHbFoWV0a3kgc2xvdsOhIHZlxL5rw71taSBww61zbWVuYW1pCmdyZXAoIlIiLCBzbG92YSkgICAgICMgcG96w61jaWEgc2xvdmEgIlIiCmBgYAoKIyMgTWFsw6kgY3ZpxI1lbmllCk5hcMOtxaF0ZSB2ZXR1IHBvZMS+YSBzZWJhIGE6ICAKMS4gcm96ZGXEvnRlIGp1IG5hIHNsb3bDoSwgIAoyLiBzcG/EjcOtdGFqdGUgcG/EjWV0IHDDrXNtZW4gdm8gdsWhZXRrw71jaCBzbG92w6FjaCBkb2tvcHksICAKMy4gdnltZcWIdGUgamVkbm8gc2xvdm8gemEgaW7DqSBwb21vY291IGBnc3ViKClgLgoKKipSaWXFoWVuaWU6KioKYGBge3J9Cm1val90ZXh0IDwtICJVxI1lbmllIFIgTWFya2Rvd24gamUgdmXEvm1pIHXFvml0b8SNbsOpIGEgemF1asOtbWF2w6kiCnNsb3ZhMiA8LSBzdHJzcGxpdChtb2pfdGV4dCwgIiAiKVtbMV1dCiMgMS4gcm96ZGVsZW5pZQpzbG92YTIKIyAyLiBwb8SNZXQgcMOtc21lbiBkb2tvcHkKc3VtKG5jaGFyKHNsb3ZhMikpCiMgMy4gem1lbmEgc2xvdmEgInXFvml0b8SNbsOpIiBuYSAicHJha3RpY2vDqSIKbm92eV90ZXh0IDwtIGdzdWIoInXFvml0b8SNbsOpIiwgInByYWt0aWNrw6kiLCBtb2pfdGV4dCkKbm92eV90ZXh0CmBgYAoKLS0tCgojIE3DtGogbsOhdnJoIHBvdcW+aXRpYSBub3Zpbmt5CgpWeXR2b3LDrW1lICoqdmxhc3Ruw7ogZnVua2NpdSoqLCBrdG9yw6EgeiB0ZXh0dSBzcHJhdsOtIMWhdGF0aXN0aWt1IHNsb3Y6CgpgYGB7cn0KYW5hbHl6dWpfdGV4dCA8LSBmdW5jdGlvbih0eHQpIHsKICBzbG92YSA8LSBzdHJzcGxpdCh0eHQsICIgIilbWzFdXQogIGRsemt5IDwtIG5jaGFyKHNsb3ZhKQogIGxpc3QoCiAgICBwb2NldF9zbG92ID0gbGVuZ3RoKHNsb3ZhKSwKICAgIHByaWVtZXJuYV9kbHprYSA9IG1lYW4oZGx6a3kpLAogICAgbmFqZGxoc2llX3Nsb3ZvID0gc2xvdmFbd2hpY2gubWF4KGRsemt5KV0KICApCn0KCmFuYWx5enVqX3RleHQoIkRuZXMgc2EgdcSNw61tZSBwcm9ncmFtb3ZhxaUgdiBqYXp5a3UgUiBNYXJrZG93biIpCmBgYAoKLS0tCgojIE51bWVyaWNrw6kgdmVrdG9yeQoKIyMgR2VuZXJvdmFuaWUgdmVrdG9yb3YKCmBgYHtyfQphIDwtIHNlcSg1LCAyNSwgYnkgPSA1KQpiIDwtIHJlcCgyLCB0aW1lcyA9IDUpCmMgPC0gcnVuaWYoNiwgbWluID0gMCwgbWF4ID0gMTApCmQgPC0gcm5vcm0oNSwgbWVhbiA9IDEwMCwgc2QgPSAxNSkKYTsgYjsgYzsgZApgYGAKCiMjIE1hbMOpIGN2acSNZW5pZSAxCgo+IFZ5dHZvcnRlIHZla3RvciBgdGVtcGAgb2JzYWh1asO6Y2kgZGVubsOpIHRlcGxvdHkgKHYgc3R1cMWIb2NoIEMpIHphIHTDvcW+ZGXFiDogMTIsIDE0LCAxNSwgMTEsIDksIDgsIDEwLiAgCj4gWmlzdGl0ZToKPiAtIHByaWVtZXJuw7ogdGVwbG90dSwgIAo+IC0gbWF4aW3DoWxudSB0ZXBsb3R1LCAgCj4gLSBrdG9yw6kgZG5pIG1hbGkgdGVwbG90dSBuacW+xaFpdSBha28gcHJpZW1lci4KCmBgYHtyfQp0ZW1wIDwtIGMoMTIsIDE0LCAxNSwgMTEsIDksIDgsIDEwKQptZWFuKHRlbXApCm1heCh0ZW1wKQp0ZW1wW3RlbXAgPCBtZWFuKHRlbXApXQpgYGAKCi0tLQoKIyMgTWFsw6kgY3ZpxI1lbmllIDIKCj4gVnl0dm9ydGUgdmVrdG9yIGBzYWxlc2AgcyBob2Rub3RhbWk6IDE1MCwgMjAwLCAxNzAsIDIyMCwgMTkwLiAgCj4gU3BvxI3DrXRhanRlOgo+IC0gY2Vsa292w70gcHJlZGFqLCAgCj4gLSBwZXJjZW50dcOhbG55IHBvZGllbCBrYcW+ZMOpaG8gZMWIYSBuYSBjZWxrb3ZvbSBwcmVkYWppLgoKYGBge3J9CnNhbGVzIDwtIGMoMTUwLCAyMDAsIDE3MCwgMjIwLCAxOTApCnN1bShzYWxlcykKcm91bmQoc2FsZXMgLyBzdW0oc2FsZXMpICogMTAwLCAyKQpgYGAKCi0tLQoKIyBNYXRpY2UKCiMjIFZ5dHZvcmVuaWUgbWF0w61jCgpgYGB7cn0KTSA8LSBtYXRyaXgoMToxMiwgbnJvdyA9IDMsIGJ5cm93ID0gVFJVRSkKTQpgYGAKCiMjIE1hbMOpIGN2acSNZW5pZSAzCgo+IFZ5dHZvcnRlIG1hdGljdSBgZ3JhZGVzYCAoM3g0KSwga2RlIHJpYWRreSByZXByZXplbnR1asO6IMWhdHVkZW50b3YgYSBzdMS6cGNlIGljaCB6bsOhbWt5IHogdGVzdG92OiAgCj4gMS4gxaF0dWRlbnQ6IDc4LCA4NSwgOTAsIDg4ICAKPiAyLiDFoXR1ZGVudDogOTIsIDgxLCA3NywgOTUgIAo+IDMuIMWhdHVkZW50OiA4NSwgODksIDkxLCA4NyAgCj4KPiBaaXN0aXRlIHByaWVtZXJuw6kgc2vDs3JlIGthxb5kw6lobyDFoXR1ZGVudGEgKHBvIHJpYWRrb2NoKSBhIHByaWVtZXJuw6kgaG9kbm90ZW5pZSB6IGthxb5kw6lobyB0ZXN0dSAocG8gc3TEunBjb2NoKS4KCmBgYHtyfQpncmFkZXMgPC0gbWF0cml4KGMoNzgsODUsOTAsODgsIDkyLDgxLDc3LDk1LCA4NSw4OSw5MSw4NyksIG5yb3cgPSAzLCBieXJvdyA9IFRSVUUpCmdyYWRlcwpyb3dNZWFucyhncmFkZXMpCmNvbE1lYW5zKGdyYWRlcykKYGBgCgotLS0KCiMjIE1hbMOpIGN2acSNZW5pZSA0Cgo+IFZ5dHZvcnRlIG1hdGljdSBgQWAgKDN4MykgcyBob2Rub3RhbWkgMi4uMTAgcG8gcmlhZGtvY2ggYSBzcG/EjcOtdGFqdGU6Cj4gLSBkZXRlcm1pbmFudCBtYXRpY2UsICAKPiAtIHRyYW5zcG96w61jaXUsICAKPiAtIHPDusSNaW4gXCggQV5UIEEgXCkuCgpgYGB7cn0KQSA8LSBtYXRyaXgoMjoxMCwgbnJvdyA9IDMsIGJ5cm93ID0gVFJVRSkKZGV0KEEpCnQoQSkKdChBKSAlKiUgQQpgYGAKCi0tLQoKIyMgTWFsw6kgY3ZpxI1lbmllIDUKCj4gVnl0dm9ydGUgbWF0aWN1IGBCYCByb3ptZXJ1IDR4NCBzIGhvZG5vdGFtaSBvZCAxMCBkbyAyNSBwbyBzdMS6cGNvY2guICAKPiBaaXN0aXRlIHPDusSNZXQgdsWhZXRrw71jaCBob2Ruw7R0IHbDpMSNxaHDrWNoIGFrbyAxOCBhIHBvxI1ldCBwcnZrb3YgbWVuxaHDrWNoIGFrbyAxNS4KCmBgYHtyfQpCIDwtIG1hdHJpeCgxMDoyNSwgbnJvdyA9IDQpCnN1bShCW0IgPiAxOF0pCnN1bShCIDwgMTUpCmBgYAo=