Numerické vektory

Generovanie vektorov

v1 <- c(1, 3, 5, 7, 9)          # vlastný zoznam nepárnych čísel
v2 <- 10:15                     # postupnosť 10,11,12,13,14,15
v3 <- seq(from = 2, to = 3, by = 0.2)  # postupnosť s krokom 0.2
v4 <- rep(7, times = 4)         # 4 prvkový vektor rovnakých čísel 7
v5 <- runif(6)                  # 6 rovnomerne rozdelených premenných z intervalu [0,1]
v6 <- rnorm(6)                  # 6 normálne rozdelených premenných

v1; v2; v3; v4; v5; v6
## [1] 1 3 5 7 9
## [1] 10 11 12 13 14 15
## [1] 2.0 2.2 2.4 2.6 2.8 3.0
## [1] 7 7 7 7
## [1] 0.08817105 0.83418717 0.96097018 0.33994611 0.67083177 0.07206546
## [1]  0.2212013  2.4011057  0.5233864 -0.6725368 -1.5067329  1.2179899

Aritmetické operácie s vektormi

v <- c(5, 10, 15, 20)         # vlastný vektor

v - 3                         # každý prvok vektora zmenšíme o 3
## [1]  2  7 12 17
v * 4                         # každý prvok vektora prenásobíme 4
## [1] 20 40 60 80
(v - 2) / 2                   # od každého prvku odčítame 2 a vydelíme 2
## [1] 1.5 4.0 6.5 9.0
sqrt(v)                       # odmocnina z každého prvku vektora
## [1] 2.236068 3.162278 3.872983 4.472136
sum(c(2,4,6), c(1,1,1))       # skalárny súčin - výsledok je skalár
## [1] 15
crossprod(c(2,4,6), c(1,1,1)) # skalárny súčin (výsledok matica 1x1)
##      [,1]
## [1,]   12
c(2,4,6) * c(1,1,1)           # Hadamardov súčin (prvok po prvku)
## [1] 2 4 6

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

length(c(10,20,30,40))         # dĺžka prvého vektora
## [1] 4
length(c(2,4,6,8))             # dĺžka druhého vektora
## [1] 4
c(10,20,30,40) - c(2,4,6,8)    # odčítanie dvoch vektorov (rovnaký rozmer)
## [1]  8 16 24 32
c(10,20,30,40) * c(2,4,6,8)    # násobenie prvok po prvku
## [1]  20  80 180 320

Indexovanie a výber niektorych prvkov vektora

y <- c(4, 9, 15, 2, 25, 8, 11)

y[3]              # tretí prvok vektora
## [1] 15
y[2:5]            # prvky od 2. po 5.
## [1]  9 15  2 25
y[-c(1,7)]        # všetky prvky okrem prvého a posledného
## [1]  9 15  2 25  8
y[y < 10]         # výber všetkých prvkov menších ako 10
## [1] 4 9 2 8
which(y %% 2 == 1) # indexy prvkov, ktoré sú nepárne
## [1] 2 3 5 7

Práca s chýbajúcimi hodnotami

y <- c(2, NA, 7, 4, NA, 9)

is.na(y)                 # zistí, ktoré prvky sú NA
## [1] FALSE  TRUE FALSE FALSE  TRUE FALSE
sum(is.na(y))            # počet chýbajúcich hodnôt
## [1] 2
mean(y)                  # výsledok bude NA
## [1] NA
mean(y, na.rm = TRUE)    # priemer po odstránení NA
## [1] 5.5
median(y, na.rm = TRUE)  # medián po odstránení NA
## [1] 5.5

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

z <- c(14, 6, 9, 20, 3, 11)

mean(z)              # priemerná hodnota
## [1] 10.5
sd(z)                # štandardná odchýlka
## [1] 6.024948
min(z)               # minimálna hodnota
## [1] 3
summary(z)           # súhrn základných štatistík
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    3.00    6.75   10.00   10.50   13.25   20.00
sort(z)              # rastúce usporiadanie
## [1]  3  6  9 11 14 20
sort(z, decreasing = TRUE)  # klesajúce usporiadanie
## [1] 20 14 11  9  6  3

Malé cvičenie

Vytvorte vektor s číslami 1..49 a náhodne vyberte 6 čísel ako tip do lota.

set.seed(42)  # príkaz, ktorý nastaví "začiatočný bod" (seed) pre generátor náhodných čísel

lotto_numbers <- sample(1:49, 6) # rozpätie je 1 až 49 a chcem 6 čísel
lotto_numbers
## [1] 49 37  1 25 10 36

Matice

Vytvorenie matíc

# Matice
## Vytvorenie matíc

# matica s číslami od 5 do 20, usporiadaná po stĺpcoch
m <- matrix(5:20, nrow = 4, ncol = 4)     
m
##      [,1] [,2] [,3] [,4]
## [1,]    5    9   13   17
## [2,]    6   10   14   18
## [3,]    7   11   15   19
## [4,]    8   12   16   20
# matica s číslami od 10 do 25, usporiadaná po riadkoch
m_byrow <- matrix(10:25, nrow = 4, byrow = TRUE)  
m_byrow
##      [,1] [,2] [,3] [,4]
## [1,]   10   11   12   13
## [2,]   14   15   16   17
## [3,]   18   19   20   21
## [4,]   22   23   24   25

Rozmery matice

# vytvorím vlastnú maticu 4x3
A <- matrix(1:12, nrow = 4, ncol = 3, byrow = TRUE)

dim(A)   # zistí počet riadkov a stĺpcov
## [1] 4 3
A
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## [4,]   10   11   12

Adresovanie prvkov matice

A[2, 3]        # prvok v 2. riadku a 3. stĺpci
## [1] 6
A[ , 1]        # všetky prvky v 1. stĺpci
## [1]  1  4  7 10
A[4, ]         # všetky prvky vo 4. riadku
## [1] 10 11 12
A[1:2, 2:3]    # podmatica z riadkov 1 a 2 a stĺpcov 2 a 3
##      [,1] [,2]
## [1,]    2    3
## [2,]    5    6

Maticové operácie

## Maticové operácie 

# matica 3x3, ktorá má inverziu
A <- matrix(c(2, 5, 7,
              6, 3, 4,
              5, -2, -3), nrow = 3)

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

A + B       # sčítanie matíc
##      [,1] [,2] [,3]
## [1,]    3    6    9
## [2,]    5    4    3
## [3,]    9    7    3
A - B       # odčítanie matíc
##      [,1] [,2] [,3]
## [1,]    1    6    1
## [2,]    5    2   -7
## [3,]    5    1   -9
A * B       # Hadamardov súčin (po prvkoch)
##      [,1] [,2] [,3]
## [1,]    2    0   20
## [2,]    0    3  -10
## [3,]   14   12  -18
A %*% B     # maticové násobenie
##      [,1] [,2] [,3]
## [1,]   12   21   68
## [2,]    1   -3   23
## [3,]    1   -5   30
t(A)        # transpozícia matice
##      [,1] [,2] [,3]
## [1,]    2    5    7
## [2,]    6    3    4
## [3,]    5   -2   -3
det(A)      # determinant matice (nebude 0)
## [1] -1
solve(A)    # inverzia matice
##      [,1] [,2] [,3]
## [1,]    1  -38   27
## [2,]   -1   41  -29
## [3,]    1  -34   24

Zlučovanie vektorov do matíc

# dva nové vektory
v1 <- 10:12
v2 <- 20:22

# spojenie po stĺpcoch (každý vektor ako stĺpec)
C <- cbind(v1, v2)

# spojenie po riadkoch (každý vektor ako riadok)
D <- rbind(v1, v2)

C
##      v1 v2
## [1,] 10 20
## [2,] 11 21
## [3,] 12 22
D
##    [,1] [,2] [,3]
## v1   10   11   12
## v2   20   21   22

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

# vlastná matica 4x3
M <- matrix(10:21, nrow = 4)
M
##      [,1] [,2] [,3]
## [1,]   10   14   18
## [2,]   11   15   19
## [3,]   12   16   20
## [4,]   13   17   21
apply(M, 1, max)   # maximum z každého riadku
## [1] 18 19 20 21
apply(M, 2, min)   # minimum z každého stĺpca
## [1] 10 14 18

Malé cvičenie

# matica 4x3: výsledky 4 študentov v 3 testoch
grades <- matrix(c(75, 82, 91,
                   60, 70, 65,
                   88, 95, 92,
                   50, 55, 70), 
                 nrow = 4, byrow = TRUE)

grades
##      [,1] [,2] [,3]
## [1,]   75   82   91
## [2,]   60   70   65
## [3,]   88   95   92
## [4,]   50   55   70
# priemerné skóre študentov (po riadkoch)
rowMeans(grades)
## [1] 82.66667 65.00000 91.66667 58.33333
# priemerné výsledky testov (po stĺpcoch)
colMeans(grades)
## [1] 68.25 75.50 79.50
# matica 10 hráčov × 5 hodov kockou
dice <- matrix(sample(1:6, 50, replace = TRUE), nrow = 10, byrow = TRUE)
dice
##       [,1] [,2] [,3] [,4] [,5]
##  [1,]    2    2    1    4    1
##  [2,]    5    6    4    2    2
##  [3,]    3    1    1    3    4
##  [4,]    5    5    5    4    2
##  [5,]    4    3    2    1    2
##  [6,]    6    3    6    2    4
##  [7,]    4    6    2    5    4
##  [8,]    5    4    2    2    3
##  [9,]    1    5    2    2    6
## [10,]    6    2    4    3    6
# skóre hráčov
scores <- rowSums(dice)
scores
##  [1] 10 19 12 21 12 21 21 16 16 21
# víťaz (riadok s max skóre)
which.max(scores)
## [1] 4