knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE
)

Globálne nastavenie Chunkov

V nižšie uvedenom Chunku je urobené základné globálne nastavenie Chunkov v celom Notebooku.

Úvod k základným operáciám v R

Tento notebook demonštruje základné operácie v jazyku R so:

Tam, kde je to užitočné, sú zahrnuté malé cvičenia.


# Skaláre

## Numerické skaláre

### Priradenie konštanty do premennej
a <- 12
b <- 4.7

## Aritmetika
sum_ab      <- a + b         # súčet
diff_ab     <- a - b         # rozdiel
prod_ab     <- a * b         # násobenie
quot_ab     <- a / b         # delenie
int_div_ab  <- a %/% b       # celočíselné delenie
power_ab    <- a ^ b         # umocňovanie
mod_ab      <- a %% b        # zvyšok po delení

## Rounding / zaokrúhľovanie
round_b     <- round(b)           # na najbližšie celé číslo
ceil_b      <- ceiling(b)         # najbližšie vyššie celé číslo
floor_b     <- floor(b)           # najbližšie nižšie celé číslo
trunc_b     <- trunc(b)           # odrezanie desatinnej časti
signif_b    <- signif(b, digits=2) # zaokrúhlenie na 2 významné číslice

#### Výpis výsledkov
a; b
sum_ab; diff_ab; prod_ab; quot_ab; int_div_ab; power_ab; mod_ab
round_b; ceil_b; floor_b; trunc_b; signif_b


## Malé cvičenie

#### Zadanie
x <- 23
y <- 6.8

#### 1. Súčet a rozdiel
sum_xy  <- x + y
diff_xy <- x - y

#### 2. Celočíselné delenie a modulo
int_div_xy <- x %/% y
mod_xy     <- x %% y

#### 3. Zaokrúhľovanie
round_y  <- round(y)
trunc_y  <- trunc(y)
signif_y <- signif(y, digits=2)

#### Výpis výsledkov
sum_xy; diff_xy
int_div_xy; mod_xy
round_y; trunc_y; signif_y

# Text 

## Textové premenné – nové príklady
- first <- "Richard"
- last  <- "Vladyka"
- full  <- paste(first, last)         # spojenie s medzerou
- full_nospace <- paste0(first, last) # spojenie bez medzery
- hobby <- paste("Reading", "Sports", "R Programming", sep = ", ") # nové spojenie

### Výpis
first; last; full; full_nospace; hobby

## Dĺžka textu a podreťazce
sentence <- "Learning R is fun!"
nchar(sentence)        # počet znakov
substr(sentence, 10, 15) # výber podreťazca

### Nové príkazy
- toupper(first)         # celé písmená
- tolower(last)          # malé písmená

### Logické hodnoty – nové príklady
- raining <- TRUE
- weekend <- FALSE

# Základné operácie
- !raining       # NOT
- raining & weekend  # AND
- raining | weekend  # OR
- xor(raining, weekend)

## Zložitejšie podmienky
- temperature <- 25
- temperature > 20 & temperature < 30  # súčasne

## Vektor logických hodnôt
conditions <- c(raining, weekend, temperature > 20)
conditions

### Nové príkazy
- all(conditions)  # TRUE ak všetky prvky sú TRUE
- any(conditions)  # TRUE ak aspoň jeden prvok je TRUE
## Malé cvičenie

#### 1. Definovanie textov
city <- "Banska Bystrica"
country <- "Slovakia"

#### 2. Spojenie do jednej vety
sentence <- paste("I live in", city, ",", country, sep = " ")
sentence <- paste0("I live in ", city, ", ", country, ".")

#### 3. Počet znakov
length_sentence <- nchar(sentence)

#### 4. Prvých 10 znakov
first_part <- substr(sentence, 1, 10)

#### 5. Logická kontrola
longer_than_20 <- length_sentence > 20

#### Výpis výsledkov
sentence
## [1] "I live in Banska Bystrica, Slovakia."
length_sentence
## [1] 36
first_part
## [1] "I live in "
longer_than_20
## [1] TRUE

# Numerické vektory

## Generovanie nových vektorov
v1 <- c(3, 6, 9, 12)                  # vektor so štyrmi číslami zadanými ručne
v2 <- 5:10                            # postupnosť čísel od 5 do 10
v3 <- seq(from = 2, to = 3, by = 0.2) # postupnosť 2, 2.2, 2.4,... až do 3
v4 <- rep(7, times = 4)               # opakovanie čísla 7 štyrikrát
v5 <- runif(6, min=0, max=10)         # 6 náhodných čísiel rovnomerného rozdelenia 0-10
v6 <- rnorm(6, mean=5, sd=2)          # 6 náhodných čísiel normálneho rozdelenia so strednou 5 a sd 2

#### Výpis všetkých vektorov
v1; v2; v3; v4; v5; v6

## Aritmetické operácie
v <- c(2, 4, 6, 8)
v + 5           # každý prvok vektora zväčšíme o 5
v * 3           # každý prvok vektora vynásobíme 3
(v + 2)/2       # pridáme 2 a vydelíme 2 – operácia po prvkoch
exp(v)          # exponenciálna funkcia e^x pre každý prvok
prod(v)         # súčin všetkých prvkov vektora
cumsum(v)       # kumulatívna suma prvkov: každý prvok je súčet predchádzajúcich
cumprod(v)      # kumulatívny súčin prvkov
rev(v)          # obrátenie poradia prvkov vektora

## Operácie s dvoma vektormi rovnakého rozmeru
length(v2)      # počet prvkov vo vektore v2
length(v5)      # počet prvkov vo vektore v5
v2 + v5         # sčítanie dvoch vektorov po prvkoch (musí byť rovnaký rozmer)

## Indexovanie a výber prvkov
x <- c(8, 15, 4, 20, 7, 0, 12)
x[1]            # prvý prvok vektora
x[3:5]          # tretí až piaty prvok
x[-2]           # všetky prvky okrem druhého
x[x > 10]       # výber prvkov väčších ako 10
which(x > 10)   # pozície prvkov väčších ako 10

## Práca s chýbajúcimi hodnotami
y <- c(2, NA, 4, NA, 8)
is.na(y)                 # TRUE pre chýbajúce hodnoty (NA)
mean(y)                  # výsledok je NA, lebo vektory obsahujú NA
mean(y, na.rm = TRUE)    # pri výpočte priemeru ignorujeme NA

## Základné štatistiky
z <- c(5, 12, 7, 9, 3)
mean(z)                    # priemer
sd(z)                      # štandardná odchýlka
median(z)                  # medián
max(z)                     # maximálna hodnota
min(z)                     # minimálna hodnota
summary(z)                 # rýchly prehľad štatistík: min, 1st Qu., median, mean, 3rd Qu., max
sort(z)                    # zoradenie vzostupne
sort(z, decreasing = TRUE) # zoradenie zostupne
## Malé cvičenie

#### Numerické vektory – vlastné cvičenie

#### 1. Definovanie vektorov
temps <- c(15, 22, NA, 18, 25, 20)
rainfall <- c(0, 5, 3, 2, 0, 1)

#### 2. Priemer a medián teplôt (NA ignorujeme)
mean_temps <- mean(temps, na.rm = TRUE)
median_temps <- median(temps, na.rm = TRUE)

#### 3. Celkový súčet zrážok
total_rainfall <- sum(rainfall)

#### 4. Teploty väčšie ako 20
high_temps <- temps[temps > 20]       # automaticky ignoruje NA
positions_high <- which(temps > 20)   # pozície prvkov > 20

#### 5. Kumulatívna suma zrážok
cumsum_rainfall <- cumsum(rainfall)

#### 6. Zoradenie teplôt (vzostupne a zostupne)
sorted_temps_asc <- sort(temps, na.last = TRUE)
sorted_temps_desc <- sort(temps, decreasing = TRUE, na.last = TRUE)

#### Výpis výsledkov
mean_temps; median_temps
## [1] 20
## [1] 20
total_rainfall
## [1] 11
high_temps; positions_high
## [1] 22 NA 25
## [1] 2 5
cumsum_rainfall
## [1]  0  5  8 10 10 11
sorted_temps_asc
## [1] 15 18 20 22 25 NA
sorted_temps_desc
## [1] 25 22 20 18 15 NA

# Matice
## Vytvorenie matíc
m <- matrix(10:21, nrow = 4, ncol = 3)            # hodnoty sú zadané po stĺpcoch
m_byrow <- matrix(10:21, nrow = 4, byrow = TRUE)  # hodnoty zadané po riadkoch
m; m_byrow                                        # výpis matíc

## Rozmery matice
dim(m)                   # počet riadkov a stĺpcov
nrow(m)                  # počet riadkov
ncol(m)                  # počet stĺpcov

## Adresovanie prvkov matice
m[2, 3]      # prvok na 2. riadku a 3. stĺpci
m[, 1]       # všetky prvky 1. stĺpca
m[3, ]       # všetky prvky 3. riadku
m[2:3, 2:3]  # podmatica: riadky 2-3, stĺpce 2-3

## Maticové operácie
A <- matrix(c(2,4,1,3), nrow = 2)
B <- matrix(c(5,2,7,6), nrow = 2)

A + B        # sčítanie matíc po prvkoch
A * B        # Hadamardov súčin (po prvkoch)
A %*% B      # klasické násobenie matíc
t(A)         # transpozícia matice (riadky ↔ stĺpce)
det(A)       # determinant matice
solve(A)     # inverzia matice (ak je regulárna)
rowSums(A)   # suma po riadkoch
colSums(B)   # suma po stĺpcoch

### Zlučovanie vektorov do matíc 
C <- cbind(2:4, 5:7)   # spájanie po stĺpcoch
D <- rbind(2:4, 5:7)   # spájanie po riadkoch
C; D

## Vypočítanie zvolenej štatistiky po riadkoch a stĺpcoch
M <- matrix(5:16, nrow = 4)
M
apply(M, 1, mean)   # priemery po riadkoch
apply(M, 2, sum)    # súčet po stĺpcoch
## Malé cvičenie
#### 1. Vytvorte maticu 3x4 s hodnotami 11..22 po riadkoch
#### 2. Vypočítajte priemer po riadkoch a súčet po stĺpcoch
#### 3. Vytvorte transpozíciu a vynásobte pôvodnú maticu
M_ex <- matrix(11:22, nrow = 3, byrow = TRUE)
row_means_ex <- apply(M_ex, 1, mean)
col_sums_ex <- apply(M_ex, 2, sum)
product_ex <- M_ex %*% t(M_ex)

#### Výpis výsledkov
M_ex
##      [,1] [,2] [,3] [,4]
## [1,]   11   12   13   14
## [2,]   15   16   17   18
## [3,]   19   20   21   22
row_means_ex
## [1] 12.5 16.5 20.5
col_sums_ex
## [1] 45 48 51 54
product_ex
##      [,1] [,2] [,3]
## [1,]  630  830 1030
## [2,]  830 1094 1358
## [3,] 1030 1358 1686

# Môj návrh použitia: novinky
## Definovanie údajov
temps <- c(15, 22, NA, 18, 25, 20)   # teploty počas 6 dní
rainfall <- c(0, 5, 3, 2, 0, 1)     # zrážky počas 6 dní

#### 1. Kombinované filtrovanie: dni s teplotou >20 a žiadnymi zrážkami
hot_dry <- temps[temps > 20 & rainfall == 0]   # vyber prvkov splňujúcich obe podmienky
hot_dry_positions <- which(temps > 20 & rainfall == 0) # pozície týchto dní

#### 2. Identifikácia extrémnych hodnôt
max_temp <- temps[which.max(temps)]   # najvyššia teplota
min_rain <- rainfall[which.min(rainfall)]  # najnižšie zrážky

#### 3. Jednoduchá vizualizácia
barplot(temps, names.arg = paste("Day", 1:6), col = "skyblue", 
        main = "Denné teploty", ylab = "°C")

#### Výpis výsledkov
hot_dry
hot_dry_positions
max_temp
min_rain