Numerické vektory

Generovanie vektorov

# 1 generovanie rôznych typov vektorov
v1 <- c(2, 4, 6, 8)                     # manuálne zadaný vektor
v2 <- 1:5                               # aritmetická postupnosť
v3 <- seq(from = 0, to = 1, by = 0.25)  # sekvencia s krokom 0.25
v4 <- rep(3, times = 5)                 # opakovanie čísla
v5 <- runif(5, min = -1, max = 1)       # náhodné čísla (rovnomerné rozdelenie)
v6 <- rnorm(5, mean = 10, sd = 2)       # normálne rozdelenie so stredom 10
v1; v2; v3; v4; v5; v6
## [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.36579445  0.95371219  0.01398345 -0.05403417  0.39688422
## [1] 10.33271 10.14679 11.68088 10.74001 14.10938
# 2 Kombinácia vektorov
v_all <- c(v1, v2, v3, v4)
v_all_sorted <- sort(v_all, decreasing = FALSE)
cat("\n Zlúčený a roztriedený vektor:\n")
## 
##  Zlúčený a roztriedený vektor:
print(v_all_sorted)
##  [1] 0.00 0.25 0.50 0.75 1.00 1.00 2.00 2.00 3.00 3.00 3.00 3.00 3.00 3.00 4.00
## [16] 4.00 5.00 6.00 8.00
# 3 Krátka analýza
mean_v6 <- mean(v6)
sd_v6 <- sd(v6)
cat("\n Analýza normálne rozdelených hodnôt (v6):\n")
## 
##  Analýza normálne rozdelených hodnôt (v6):
cat("Priemer =", round(mean_v6, 2), ", smerodajná odchýlka =", round(sd_v6, 2), "\n")
## Priemer = 11.4 , smerodajná odchýlka = 1.63

Malé cvičenie

# 1 Vytvorenie vektorov
vek_seq <- seq(from = 5, to = 20, by = 3)        # postupnosť s krokom 3
vek_rep <- rep(2, times = 6)                     # opakovanie čísla 2 šesťkrát
vek_norm <- rnorm(6, mean = 10, sd = 2)          # 6 náhodných hodnôt ~ N(10, 2)
vek_seq; vek_rep; vek_norm;
## [1]  5  8 11 14 17 20
## [1] 2 2 2 2 2 2
## [1]  9.117164  6.845734 12.072471 11.912294  8.747027  9.369683
# 1 Spojenie do jedného vektora
vek_spojeny <- c(vek_seq, vek_rep, vek_norm)
cat("Spojený vektor:\n")
## Spojený vektor:
print(round(vek_spojeny, 2))
##  [1]  5.00  8.00 11.00 14.00 17.00 20.00  2.00  2.00  2.00  2.00  2.00  2.00
## [13]  9.12  6.85 12.07 11.91  8.75  9.37
# 3 Výpočty základných štatistík
priemer <- mean(vek_spojeny)
median <- median(vek_spojeny)
maximum <- max(vek_spojeny)
cat("\n Štatistiky:\n")
## 
##  Štatistiky:
cat("Priemer =", round(priemer, 2),
    "\nMedián =", round(median, 2),
    "\nMaximum =", round(maximum, 2), "\n")
## Priemer = 8.06 
## Medián = 8.37 
## Maximum = 20
# 4 Analýza nadpriemerných hodnôt
nadpriemerne <- vek_spojeny[vek_spojeny > priemer]
pocet_nadpriemernych <- length(nadpriemerne)
cat("\n Počet hodnôt väčších ako priemer:", pocet_nadpriemernych, "\n")
## 
##  Počet hodnôt väčších ako priemer: 9
cat("Tieto hodnoty sú:", round(nadpriemerne, 2), "\n")
## Tieto hodnoty sú: 11 14 17 20 9.12 12.07 11.91 8.75 9.37
# 5 Vizualizácia
hist(vek_spojeny, 
     col = "lightgreen", 
     border = "white", 
     main = "Histogram spojeného vektora",
     xlab = "Hodnoty", 
     ylab = "Frekvencia")

# 7 Bonus – čo ak zvýšime rozptyl?
vek_norm_wide <- rnorm(1000, mean = 10, sd = 5)
hist(vek_norm_wide,
     col = "lightcoral",
     border = "white",
     main = "Normálne rozdelenie s väčšou smerodajnou odchýlkou (sd = 5)",
     xlab = "Hodnota")

Aritmetické operácie s vektormi

# 1 Definícia vektora
v <- c(1, 2, 3, 4)
u <- c(2, 0, 1, 3)
v; u;
## [1] 1 2 3 4
## [1] 2 0 1 3
# 2 Základné operácie s vektormi 
v_plus_10 <- v + 10
v_times_2 <- v * 2
v_transformed <- (v + 1) / 2
v_exp <- exp(v)
cat("\n Základné operácie s vektormi:\n")
## 
##  Základné operácie s vektormi:
cat("v + 10 =", v_plus_10, "\n")
## v + 10 = 11 12 13 14
cat("v * 2 =", v_times_2, "\n")
## v * 2 = 2 4 6 8
cat("(v + 1)/2 =", v_transformed, "\n")
## (v + 1)/2 = 1 1.5 2 2.5
cat("exp(v) =", round(v_exp, 3), "\n")
## exp(v) = 2.718 7.389 20.086 54.598
# 3 Operácie medzi vektormi 
skalar_sucin_sum <- sum(v * u)          # skalárny súčin cez sumu
skalar_sucin_cross <- crossprod(v, u)   # skalárny súčin cez funkciu (matica 1x1)
hadamard_sucin <- v * u                 # súčin po prvkoch
cat("\n Operácie medzi vektormi v a u:\n")
## 
##  Operácie medzi vektormi v a u:
cat("Skalárny súčin (sum) =", skalar_sucin_sum, "\n")
## Skalárny súčin (sum) = 17
cat("Skalárny súčin (crossprod) =", skalar_sucin_cross, "\n")
## Skalárny súčin (crossprod) = 17
cat("Hadamardov súčin =", hadamard_sucin, "\n")
## Hadamardov súčin = 2 0 3 12

Malé cvičenie

# Ukážka lineárnej kombinácie 
kombinacia <- 2*v + 3*u
cat("\n Lineárna kombinácia 2*v + 3*u:\n")
## 
##  Lineárna kombinácia 2*v + 3*u:
print(kombinacia)
## [1]  8  4  9 17

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

# 1 Definícia vektorov
v1 <- c(1, 2, 3, 4, 5)
v2 <- runif(5, min = 0, max = 10)   # náhodný vektor rovnakého rozmeru
v1; v2;
## [1] 1 2 3 4 5
## [1] 2.1972297 0.6069964 6.0922030 7.1643729 5.7304644
# 2 Overenie dĺžok
cat("Dĺžka v1:", length(v1), "\n")
## Dĺžka v1: 5
cat("Dĺžka v2:", length(v2), "\n")
## Dĺžka v2: 5
# 3 Ak majú rovnakú dĺžku → môžeme sčítať
if (length(v1) == length(v2)) {
  v_sum <- v1 + v2
  cat("\n Súčet vektorov v1 + v2:\n")
  print(round(v_sum, 2))
} else {
  cat("\n Vektory nemajú rovnaký rozmer – nemožno ich sčítať.\n")
}
## 
##  Súčet vektorov v1 + v2:
## [1]  3.20  2.61  9.09 11.16 10.73
# 4 Ukážka, čo sa stane pri rôznych rozmeroch
v3 <- c(1, 2, 3)
cat("\n Pokus o sčítanie v1 + v3 (nerovnaké dĺžky):\n")
## 
##  Pokus o sčítanie v1 + v3 (nerovnaké dĺžky):
print(v1 + v3)   # R tu automaticky recykluje prvky kratšieho vektora
## Warning in v1 + v3: longer object length is not a multiple of shorter object
## length
## [1] 2 4 6 5 7

Malé cvičenie

# 6 Rozdiel a priemer
v_diff <- v1 - v2
v_mean <- (v1 + v2) / 2
cat("\n Rozdiel v1 - v2:", round(v_diff, 2), "\n")
## 
##  Rozdiel v1 - v2: -1.2 1.39 -3.09 -3.16 -0.73
cat("Priemer (v1 a v2):", round(v_mean, 2), "\n")
## Priemer (v1 a v2): 1.6 1.3 4.55 5.58 5.37

Indexovanie a výber niektorych prvkov vektora

# 1 Definícia vektora
x <- c(5, 12, 3, 18, 7, 0, 21)

# 2 Základné formy indexovania
x[1]          # prvý prvok vektora
## [1] 5
x[2:4]        # druhý až štvrtý prvok
## [1] 12  3 18
x[-1]         # všetky prvky okrem prvého
## [1] 12  3 18  7  0 21
x[c(1, 3, 5)] # výber konkrétnych pozícií
## [1] 5 3 7
x[length(x)]  # posledný prvok
## [1] 21
# 3 Logické podmienky a výber podľa hodnoty
x[x > 10]          # všetky prvky väčšie ako 10
## [1] 12 18 21
x[x %% 2 == 0]     # všetky párne prvky
## [1] 12 18  0
x[x <= mean(x)]    # prvky menšie alebo rovné priemeru
## [1] 5 3 7 0
# 4 Funkcia which() – indexy, ktoré spĺňajú podmienku
which(x > 10)
## [1] 2 4 7
which.min(x)       # pozícia najmenšej hodnoty
## [1] 6
which.max(x)       # pozícia najväčšej hodnoty
## [1] 7
# 5 Kombinácia indexovania a úprav
x_new <- x
x_new[x_new < 5] <- 0   # všetky hodnoty menšie ako 5 nahradíme nulou
x_new
## [1]  5 12  0 18  7  0 21
# 6 Analýza
cat("Pôvodný vektor:", x, "\n")
## Pôvodný vektor: 5 12 3 18 7 0 21
cat("Upravený vektor:", x_new, "\n")
## Upravený vektor: 5 12 0 18 7 0 21
cat("Indexy hodnôt väčších ako 10:", which(x > 10), "\n")
## Indexy hodnôt väčších ako 10: 2 4 7
cat("Najmenšia hodnota =", min(x), "na pozícii", which.min(x), "\n")
## Najmenšia hodnota = 0 na pozícii 6
cat("Najväčšia hodnota =", max(x), "na pozícii", which.max(x), "\n")
## Najväčšia hodnota = 21 na pozícii 7

Práca s chýbajúcimi hodnotami

# 1 Definícia vektora s chýbajúcimi hodnotami
y <- c(1, NA, 3, NA, 5)

# 2 Identifikácia chýbajúcich hodnôt
is.na(y)             # logický vektor – TRUE tam, kde je NA
## [1] FALSE  TRUE FALSE  TRUE FALSE
which(is.na(y))      # pozície, kde sa nachádza NA
## [1] 2 4
sum(is.na(y))        # počet chýbajúcich hodnôt
## [1] 2
# 3 Základné operácie
mean(y)                # vráti NA, pretože vektor obsahuje NA
## [1] NA
mean(y, na.rm = TRUE)  # ignoruje NA pri výpočte priemeru
## [1] 3
sum(y, na.rm = TRUE)   # súčet bez NA hodnôt
## [1] 9
length(y[!is.na(y)])   # počet ne-NA hodnôt
## [1] 3
# 4 Náhrada chýbajúcich hodnôt
y_filled_mean <- y
y_filled_mean[is.na(y_filled_mean)] <- mean(y, na.rm = TRUE)   # nahradíme NA priemerom

y_filled_zero <- y
y_filled_zero[is.na(y_filled_zero)] <- 0                       # nahradíme NA nulou

# 5 Porovnanie výsledkov
cat("Pôvodný vektor:", y, "\n")
## Pôvodný vektor: 1 NA 3 NA 5
cat("Počet NA:", sum(is.na(y)), "\n\n")
## Počet NA: 2
cat("Vektor s NA nahradenými priemerom:", round(y_filled_mean, 2), "\n")
## Vektor s NA nahradenými priemerom: 1 3 3 3 5
cat("Vektor s NA nahradenými nulou:", y_filled_zero, "\n")
## Vektor s NA nahradenými nulou: 1 0 3 0 5

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

# 1 Definícia vektora
z <- c(10, 3, 5, 8, 2)

# 2 Výpočet základných štatistík
priemer <- mean(z)
smer_odch <- sd(z)
maximum <- max(z)
minimum <- min(z)
median_z <- median(z)
rozsah <- range(z)

# 3 Výstup základných štatistík
cat("Základné štatistiky vektora z:\n")
## Základné štatistiky vektora z:
cat("Priemer =", priemer, "\n")
## Priemer = 5.6
cat("Smerodajná odchýlka =", round(smer_odch, 2), "\n")
## Smerodajná odchýlka = 3.36
cat("Minimum =", minimum, ", Maximum =", maximum, "\n")
## Minimum = 2 , Maximum = 10
cat("Medián =", median_z, "\n")
## Medián = 5
cat("Rozsah hodnôt =", paste(rozsah, collapse = " – "), "\n\n")
## Rozsah hodnôt = 2 – 10
# 4 Rýchly prehľad pomocou summary()
summary(z)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     3.0     5.0     5.6     8.0    10.0
# 5 Usporiadanie hodnôt
z_rastuce <- sort(z)
z_klesajuce <- sort(z, decreasing = TRUE)
z_poradie <- order(z)           # indexy podľa rastúceho poradia

cat("\nRastúce poradie:", z_rastuce, "\n")
## 
## Rastúce poradie: 2 3 5 8 10
cat("Klesajúce poradie:", z_klesajuce, "\n")
## Klesajúce poradie: 10 8 5 3 2
cat("Indexy podľa rastúceho poradia:", z_poradie, "\n")
## Indexy podľa rastúceho poradia: 5 2 3 4 1

Malé cvičenie

# Normalizácia hodnôt
z_normalized <- (z - min(z)) / (max(z) - min(z))
cat("\nNormalizované hodnoty (0–1):\n")
## 
## Normalizované hodnoty (0–1):
print(round(z_normalized, 2))
## [1] 1.00 0.12 0.38 0.75 0.00