Numerické vektory

Generovanie vektorov

v1 <- c(2, 4, 6, 8)
v2 <- 1:5                  # postupnost 1,2,3,4,5
v3 <- seq(from = 0, to = 1, by = 0.25)  # postupnost s krokom 0.25
v4 <- rep(3, times = 5)    # 3,3,3,3,3  # 5 clenna postupnost trojak
v5 <- runif(5)             # generovanie rovnomerne rozdelenych premennych v intervale [0,1]
v6 <- rnorm(5)             # generovanie normalne rozdelenych premennych
v1; v2; v3; v4; v5
[1] 2 4 6 8
[1] 1 2 3 4 5
[1] 0.00 0.25 0.50 0.75 1.00
[1] 3 3 3 3 3
[1] 0.9604600 0.8140716 0.2521879 0.4292501 0.5217268

Aritmetické operácie s vektormi

v <- c(1, 2, 3, 4)
v + 10           # kazdy prvok vektora zvacsime o 10
[1] 11 12 13 14
v * 2            # kazdy prvok vektora prenasobime 2
[1] 2 4 6 8
(v + 1) / 2
[1] 1.0 1.5 2.0 2.5
exp(v)           # exponencialna funkcia z kazdeho prvku vektora
[1]  2.718282  7.389056 20.085537 54.598150

Quitting from III.-zadanie.Rmd:34-43 [unnamed-chunk-2]
sum(c(1,2,3),c(1,1,1))          # skalarny sucin - vysledok je skalar
[1] 9
crossprod(c(1,2,3),c(1,1,1))    # skalarny sucin - vysledok je matica 1x1
     [,1]
[1,]    6
c(1,2,3)*c(1,1,1)               # Hadamardov sucin (sucin zodpovedajucich prvkov vektora)
[1] 1 2 3

Matematické operácie s 2 vektormi rovnakého rozmeru

length(c(1,2,3,4,5))
[1] 5
length(v5)            #vektor v5 je definovany vyssie
[1] 5
c(1,2,3,4,5) + v5     # pozor, oba vektory musia mat rovnaky rozmer
[1] 1.960460 2.814072 3.252188 4.429250 5.521727

Indexovanie a výber niektorych prvkov vektora

x <- c(5, 12, 3, 18, 7, 0, 21)
x[1]           # indexovanie - novy jedno-prvkovy vektor - prvy prvok vektora x
[1] 5
x[2:4]         # novy vektor s druhym az stvrtym prvkom vektora x
[1] 12  3 18
x[-1]          # novy vektor - vsetky prvky vektora x okrem prvého
[1] 12  3 18  7  0 21
x[x > 10]      # novy vektor definovany prvkami x vacsimi ako 10
[1] 12 18 21
which(x > 10)  # ktore prvky zodpovedaju podmienke vacsieho ako 10?
[1] 2 4 7

Práca s chýbajúcimi hodnotami

y <- c(1, NA, 3, NA, 5)
is.na(y)
[1] FALSE  TRUE FALSE  TRUE FALSE
mean(y)                 # NA
[1] NA
mean(y, na.rm = TRUE)   # remove NAs
[1] 3

Základné štatistiky a usporiadanie prvkov vektora podľa veľkosti

z <- c(10, 3, 5, 8, 2)
mean(z)                 # priemerna hodnota
[1] 5.6
sd(z)                  # standardna odchylka
[1] 3.361547
max(z)                  # maximalna hodnota
[1] 10
min(z)                  # minimálna hodnota DOPLNENÉ
[1] 2
summary(z)              # rychly prehlad zakladnych statistik o vektore
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    2.0     3.0     5.0     5.6     8.0    10.0 
sort(z)                 # rastuce usporiadanie 
[1]  2  3  5  8 10
sort(z, decreasing = TRUE)  # klesajuce
[1] 10  8  5  3  2

Malé cvičenie

Vytvorte vektor w s číslami 1..10 a vypočítajte sumu všetkých párnych čísel.

w <- 1:10
sum(w[w %% 2 == 0])
[1] 30

Matice

Vytvorenie matíc

m <- matrix(1:10, nrow = 2, ncol = 5)            # hodnoty sú zadavane po stlpcoch
m_byrow <- matrix(1:10, nrow = 2, byrow = TRUE)  # hodnoty su zadavane po riadkoch
m; m_byrow
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10

Rozmery matice

dim(m)                   # (rows, cols)
[1] 2 5
m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

Adresovanie prvkov matice

m[1, 2]      # riadok 1, stlpec 2
[1] 3
m[ , 3]      # vsetky prvky v tretom stlpci - vysledok matica 3x1
[1] 5 6
m[2, ]       # vsetky prvky v druhom riadku - vysledok matica 1*3
[1]  2  4  6  8 10
m[1:2, 2:3]  # podmatica tvorena riadkami 1, 2 a stlpcami 2, 3
     [,1] [,2]
[1,]    3    5
[2,]    4    6

Maticové operácie

A <- matrix(c(1,2,3,4), nrow = 3)
B <- matrix(c(5,6,7,8), nrow = 3)

A + B        # scitanie matic
A - B        # odčítanie matíc DOPLNENÉ
A * B        # Hadamard product - nasobenie po zodpovedajucich prvkoch
A %% B      # nasobenie matic
t(A)         # transpozicia matice A - vymena riadkov a stlpcov
det(A)       # determinant matice
solve(A)     # inverzia matice (ak je matica regularna - teda inverzia sa da spocitat)

Zlučovanie vektorov do matíc

C <- cbind(1:5, 6:10)   #  - po stlpcoch 
D <- rbind(1:5, 6:10)   #  - po riadkoch 
C; D

Vypočítanie zvolenej štatistiky po riadkoch (stĺpcoch) matice

M <- matrix(1:9, nrow = 3)
M
apply(M, 1, sum)   # suma po riadkoch
apply(M, 2, mean)  # priemery po stĺpcoch

Malé cvičenie

Vytvorte maticu 5x5 s hodnotami po riadkoch 1..25, vypočítajte stĺpcové sumy a súčin matíc \(M^t M\).

M2 <- matrix(1:25, nrow = 5, byrow = TRUE)
colSums(M2)
t(M2) %*% M2

Vytvorte maticu 3x3 s hodnotami po riadkoch 1..10, vypočítajte stĺpcové sumy a súčin matíc \(M^t M\). DOPLNENÉ

M2 <- matrix(1:10, nrow = 4, byrow = TRUE)
colSums(M2)
t(M2) %*% M2

DOPLNENÉ

zlaté <- c(3,5,1)
strieborné <- c(1,1,4)
bronzové <- c(2,0,1)

# Vytvorenie tabuľky vďaka data.frame s medailami ako riadky a rokmi ako stĺpce
medaily <- data.frame(
  row.names = c("Zlaté", "Strieborné", "Bronzové"),
  "2022" = c(zlaté[1], strieborné[1], bronzové[1]),
  "2023" = c(zlaté[2], strieborné[2], bronzové[2]),
  "2024" = c(zlaté[3], strieborné[3], bronzové[3])
)
medaily
medaily[,1]       # ak chceme vypísať medaily za rok 2022 
[1] 3 1 2
m <- medaily     # pre urýchlenie práce používame skratky
summary(medaily)        # rýchla deskriptívna štatistika
     X2022         X2023         X2024    
 Min.   :1.0   Min.   :0.0   Min.   :1.0  
 1st Qu.:1.5   1st Qu.:0.5   1st Qu.:1.0  
 Median :2.0   Median :1.0   Median :1.0  
 Mean   :2.0   Mean   :2.0   Mean   :2.0  
 3rd Qu.:2.5   3rd Qu.:3.0   3rd Qu.:2.5  
 Max.   :3.0   Max.   :5.0   Max.   :4.0  

LS0tCnRpdGxlOiAiTWF0aWNlIGEgdmVrdG9yeSIKYXV0aG9yOiAiQmFyYm9yYSBLdWNow6FyaWtvdsOhICA8YnI+IChzIHZ5dcW+aXTDrW0gdmVyZWpuZSBkb3N0dXBuw71jaCBrw7Nkb3YpIgpkYXRlOiAiT2t0w7NiZXIgMjAyNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiB0YW5nbwogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIGRmX3ByaW50OiBwYWdlZAplZGl0b3Jfb3B0aW9uczoKICBtYXJrZG93bjoKICAgIHdyYXA6IDcyCi0tLQojIE51bWVyaWNrw6kgdmVrdG9yeQoKIyMgR2VuZXJvdmFuaWUgdmVrdG9yb3YKCmBgYHtyfQp2MSA8LSBjKDIsIDQsIDYsIDgpCnYyIDwtIDE6NSAgICAgICAgICAgICAgICAgICMgcG9zdHVwbm9zdCAxLDIsMyw0LDUKdjMgPC0gc2VxKGZyb20gPSAwLCB0byA9IDEsIGJ5ID0gMC4yNSkgICMgcG9zdHVwbm9zdCBzIGtyb2tvbSAwLjI1CnY0IDwtIHJlcCgzLCB0aW1lcyA9IDUpICAgICMgMywzLDMsMywzICAjIDUgY2xlbm5hIHBvc3R1cG5vc3QgdHJvamFrCnY1IDwtIHJ1bmlmKDUpICAgICAgICAgICAgICMgZ2VuZXJvdmFuaWUgcm92bm9tZXJuZSByb3pkZWxlbnljaCBwcmVtZW5ueWNoIHYgaW50ZXJ2YWxlIFswLDFdCnY2IDwtIHJub3JtKDUpICAgICAgICAgICAgICMgZ2VuZXJvdmFuaWUgbm9ybWFsbmUgcm96ZGVsZW55Y2ggcHJlbWVubnljaAp2MTsgdjI7IHYzOyB2NDsgdjUKYGBgCgojIyBBcml0bWV0aWNrw6kgb3BlcsOhY2llIHMgdmVrdG9ybWkKCmBgYHtyfQp2IDwtIGMoMSwgMiwgMywgNCkKdiArIDEwICAgICAgICAgICAjIGthemR5IHBydm9rIHZla3RvcmEgenZhY3NpbWUgbyAxMAp2ICogMiAgICAgICAgICAgICMga2F6ZHkgcHJ2b2sgdmVrdG9yYSBwcmVuYXNvYmltZSAyCih2ICsgMSkgLyAyCmV4cCh2KSAgICAgICAgICAgIyBleHBvbmVuY2lhbG5hIGZ1bmtjaWEgeiBrYXpkZWhvIHBydmt1IHZla3RvcmEKc3VtKGMoMSwyLDMpLGMoMSwxLDEpKSAgICAgICAgICAjIHNrYWxhcm55IHN1Y2luIC0gdnlzbGVkb2sgamUgc2thbGFyCmNyb3NzcHJvZChjKDEsMiwzKSxjKDEsMSwxKSkgICAgIyBza2FsYXJueSBzdWNpbiAtIHZ5c2xlZG9rIGplIG1hdGljYSAxeDEKYygxLDIsMykqYygxLDEsMSkgICAgICAgICAgICAgICAjIEhhZGFtYXJkb3Ygc3VjaW4gKHN1Y2luIHpvZHBvdmVkYWp1Y2ljaCBwcnZrb3YgdmVrdG9yYSkKYGBgCgojIyBNYXRlbWF0aWNrw6kgb3BlcsOhY2llIHMgMiB2ZWt0b3JtaSByb3ZuYWvDqWhvIHJvem1lcnUKCmBgYHtyfQpsZW5ndGgoYygxLDIsMyw0LDUpKQpsZW5ndGgodjUpICAgICAgICAgICAgI3Zla3RvciB2NSBqZSBkZWZpbm92YW55IHZ5c3NpZQpjKDEsMiwzLDQsNSkgKyB2NSAgICAgIyBwb3pvciwgb2JhIHZla3RvcnkgbXVzaWEgbWF0IHJvdm5ha3kgcm96bWVyCmBgYAoKIyMgSW5kZXhvdmFuaWUgYSB2w71iZXIgbmlla3RvcnljaCBwcnZrb3YgdmVrdG9yYQoKYGBge3J9CnggPC0gYyg1LCAxMiwgMywgMTgsIDcsIDAsIDIxKQp4WzFdICAgICAgICAgICAjIGluZGV4b3ZhbmllIC0gbm92eSBqZWRuby1wcnZrb3Z5IHZla3RvciAtIHBydnkgcHJ2b2sgdmVrdG9yYSB4CnhbMjo0XSAgICAgICAgICMgbm92eSB2ZWt0b3IgcyBkcnVoeW0gYXogc3R2cnR5bSBwcnZrb20gdmVrdG9yYSB4CnhbLTFdICAgICAgICAgICMgbm92eSB2ZWt0b3IgLSB2c2V0a3kgcHJ2a3kgdmVrdG9yYSB4IG9rcmVtIHBydsOpaG8KeFt4ID4gMTBdICAgICAgIyBub3Z5IHZla3RvciBkZWZpbm92YW55IHBydmthbWkgeCB2YWNzaW1pIGFrbyAxMAp3aGljaCh4ID4gMTApICAjIGt0b3JlIHBydmt5IHpvZHBvdmVkYWp1IHBvZG1pZW5rZSB2YWNzaWVobyBha28gMTA/CmBgYAoKIyMgUHLDoWNhIHMgY2jDvWJhasO6Y2ltaSBob2Rub3RhbWkKCmBgYHtyfQp5IDwtIGMoMSwgTkEsIDMsIE5BLCA1KQppcy5uYSh5KQptZWFuKHkpICAgICAgICAgICAgICAgICAjIE5BCm1lYW4oeSwgbmEucm0gPSBUUlVFKSAgICMgcmVtb3ZlIE5BcwpgYGAKCiMjIFrDoWtsYWRuw6kgxaF0YXRpc3Rpa3kgYSB1c3BvcmlhZGFuaWUgcHJ2a292IHZla3RvcmEgcG9kxL5hIHZlxL5rb3N0aQoKYGBge3J9CnogPC0gYygxMCwgMywgNSwgOCwgMikKbWVhbih6KSAgICAgICAgICAgICAgICAgIyBwcmllbWVybmEgaG9kbm90YQpzZCh6KSAgICAgICAgICAgICAgICAgICMgc3RhbmRhcmRuYSBvZGNoeWxrYQptYXgoeikgICAgICAgICAgICAgICAgICAjIG1heGltYWxuYSBob2Rub3RhCm1pbih6KSAgICAgICAgICAgICAgICAgICMgbWluaW3DoWxuYSBob2Rub3RhIERPUExORU7DiQpzdW1tYXJ5KHopICAgICAgICAgICAgICAjIHJ5Y2hseSBwcmVobGFkIHpha2xhZG55Y2ggc3RhdGlzdGlrIG8gdmVrdG9yZQpzb3J0KHopICAgICAgICAgICAgICAgICAjIHJhc3R1Y2UgdXNwb3JpYWRhbmllIApzb3J0KHosIGRlY3JlYXNpbmcgPSBUUlVFKSAgIyBrbGVzYWp1Y2UKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKCj4gVnl0dm9ydGUgdmVrdG9yIGB3YCBzIMSNw61zbGFtaSAxLi4xMCBhIHZ5cG/EjcOtdGFqdGUgc3VtdSB2xaFldGvDvWNoIHDDoXJueWNoIMSNw61zZWwuCgpgYGB7cn0KdyA8LSAxOjEwCnN1bSh3W3cgJSUgMiA9PSAwXSkKYGBgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgTWF0aWNlCgojIyBWeXR2b3JlbmllIG1hdMOtYwoKYGBge3J9Cm0gPC0gbWF0cml4KDE6MTAsIG5yb3cgPSAyLCBuY29sID0gNSkgICAgICAgICAgICAjIGhvZG5vdHkgc8O6IHphZGF2YW5lIHBvIHN0bHBjb2NoCm1fYnlyb3cgPC0gbWF0cml4KDE6MTAsIG5yb3cgPSAyLCBieXJvdyA9IFRSVUUpICAjIGhvZG5vdHkgc3UgemFkYXZhbmUgcG8gcmlhZGtvY2gKbTsgbV9ieXJvdwpgYGAKCiMjIFJvem1lcnkgbWF0aWNlCgpgYGB7cn0KZGltKG0pICAgICAgICAgICAgICAgICAgICMgKHJvd3MsIGNvbHMpCm0KYGBgCgojIyBBZHJlc292YW5pZSBwcnZrb3YgbWF0aWNlCgpgYGB7cn0KbVsxLCAyXSAgICAgICMgcmlhZG9rIDEsIHN0bHBlYyAyCm1bICwgM10gICAgICAjIHZzZXRreSBwcnZreSB2IHRyZXRvbSBzdGxwY2kgLSB2eXNsZWRvayBtYXRpY2EgM3gxCm1bMiwgXSAgICAgICAjIHZzZXRreSBwcnZreSB2IGRydWhvbSByaWFka3UgLSB2eXNsZWRvayBtYXRpY2EgMSozCm1bMToyLCAyOjNdICAjIHBvZG1hdGljYSB0dm9yZW5hIHJpYWRrYW1pIDEsIDIgYSBzdGxwY2FtaSAyLCAzCmBgYAoKIyMgTWF0aWNvdsOpIG9wZXLDoWNpZQoKYGBge3J9CkEgPC0gbWF0cml4KGMoMSwyLDMsNCksIG5yb3cgPSAzKQpCIDwtIG1hdHJpeChjKDUsNiw3LDgpLCBucm93ID0gMykKCkEgKyBCICAgICAgICAjIHNjaXRhbmllIG1hdGljCkEgLSBCICAgICAgICAjIG9kxI3DrXRhbmllIG1hdMOtYyBET1BMTkVOw4kKQSAqIEIgICAgICAgICMgSGFkYW1hcmQgcHJvZHVjdCAtIG5hc29iZW5pZSBwbyB6b2Rwb3ZlZGFqdWNpY2ggcHJ2a29jaApBICUlIEIgICAgICAjIG5hc29iZW5pZSBtYXRpYwp0KEEpICAgICAgICAgIyB0cmFuc3BvemljaWEgbWF0aWNlIEEgLSB2eW1lbmEgcmlhZGtvdiBhIHN0bHBjb3YKZGV0KEEpICAgICAgICMgZGV0ZXJtaW5hbnQgbWF0aWNlCnNvbHZlKEEpICAgICAjIGludmVyemlhIG1hdGljZSAoYWsgamUgbWF0aWNhIHJlZ3VsYXJuYSAtIHRlZGEgaW52ZXJ6aWEgc2EgZGEgc3BvY2l0YXQpCmBgYAoKIyMgWmx1xI1vdmFuaWUgdmVrdG9yb3YgZG8gbWF0w61jCgpgYGB7cn0KQyA8LSBjYmluZCgxOjUsIDY6MTApICAgIyAgLSBwbyBzdGxwY29jaCAKRCA8LSByYmluZCgxOjUsIDY6MTApICAgIyAgLSBwbyByaWFka29jaCAKQzsgRApgYGAKCiMjIFZ5cG/EjcOtdGFuaWUgenZvbGVuZWogxaF0YXRpc3Rpa3kgcG8gcmlhZGtvY2ggKHN0xLpwY29jaCkgbWF0aWNlCgpgYGB7cn0KTSA8LSBtYXRyaXgoMTo5LCBucm93ID0gMykKTQphcHBseShNLCAxLCBzdW0pICAgIyBzdW1hIHBvIHJpYWRrb2NoCmFwcGx5KE0sIDIsIG1lYW4pICAjIHByaWVtZXJ5IHBvIHN0xLpwY29jaApgYGAKCiMjIE1hbMOpIGN2acSNZW5pZQoKPiBWeXR2b3J0ZSBtYXRpY3UgNXg1IHMgaG9kbm90YW1pIHBvIHJpYWRrb2NoIDEuLjI1LCB2eXBvxI3DrXRhanRlIHN0xLpwY292w6kgc3VteSBhIHPDusSNaW4gbWF0w61jICRNXnQgTSQuCgpgYGB7cn0KTTIgPC0gbWF0cml4KDE6MjUsIG5yb3cgPSA1LCBieXJvdyA9IFRSVUUpCmNvbFN1bXMoTTIpCnQoTTIpICUqJSBNMgpgYGAKCj4gVnl0dm9ydGUgbWF0aWN1IDN4MyBzIGhvZG5vdGFtaSBwbyByaWFka29jaCAxLi4xMCwgdnlwb8SNw610YWp0ZSBzdMS6cGNvdsOpIHN1bXkgYSBzw7rEjWluIG1hdMOtYyAkTV50IE0kLiBET1BMTkVOw4kKCmBgYHtyfQpNMiA8LSBtYXRyaXgoMToxMCwgbnJvdyA9IDQsIGJ5cm93ID0gVFJVRSkKY29sU3VtcyhNMikKdChNMikgJSolIE0yCmBgYAoKIyBET1BMTkVOw4kKCmBgYHtyfQp6bGF0w6kgPC0gYygzLDUsMSkKc3RyaWVib3Juw6kgPC0gYygxLDEsNCkKYnJvbnpvdsOpIDwtIGMoMiwwLDEpCgojIFZ5dHZvcmVuaWUgdGFidcS+a3kgdsSPYWthIGRhdGEuZnJhbWUgcyBtZWRhaWxhbWkgYWtvIHJpYWRreSBhIHJva21pIGFrbyBzdMS6cGNlCm1lZGFpbHkgPC0gZGF0YS5mcmFtZSgKICByb3cubmFtZXMgPSBjKCJabGF0w6kiLCAiU3RyaWVib3Juw6kiLCAiQnJvbnpvdsOpIiksCiAgIjIwMjIiID0gYyh6bGF0w6lbMV0sIHN0cmllYm9ybsOpWzFdLCBicm9uem92w6lbMV0pLAogICIyMDIzIiA9IGMoemxhdMOpWzJdLCBzdHJpZWJvcm7DqVsyXSwgYnJvbnpvdsOpWzJdKSwKICAiMjAyNCIgPSBjKHpsYXTDqVszXSwgc3RyaWVib3Juw6lbM10sIGJyb256b3bDqVszXSkKKQptZWRhaWx5CmBgYAoKYGBge3J9Cm1lZGFpbHlbLDFdICAgICAgICMgYWsgY2hjZW1lIHZ5cMOtc2HFpSBtZWRhaWx5IHphIHJvayAyMDIyIAptIDwtIG1lZGFpbHkgICAgICMgcHJlIHVyw71jaGxlbmllIHByw6FjZSBwb3XFvsOtdmFtZSBza3JhdGt5CmBgYAoKYGBge3J9CnN1bW1hcnkobWVkYWlseSkgICAgICAgICMgcsO9Y2hsYSBkZXNrcmlwdMOtdm5hIMWhdGF0aXN0aWthCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg==