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

# 🧩 Automatická kontrola a inštalácia potrebných balíkov ----
baliky <- c("kableExtra", "tidyverse", "knitr")

for (pkg in baliky) {
  if (!require(pkg, character.only = TRUE)) {
    install.packages(pkg, dependencies = TRUE)
    library(pkg, character.only = TRUE)
  }
}

# načítanie balíkov
library(kableExtra)
library(knitr)
library(tidyverse)

Práca s údajmi

Tradičná práca s databázou

Majme údaje o zamestnancoch malej firmy – premenné: Meno, Oddelenie, Plat.

# Definovanie stĺpcov
Meno <- c("Peter", "Lucia", "Marek", "Zuzana")
Oddelenie <- c("Marketing", "IT", "Financie", "IT")
Plat <- c(1450, 2100, 1800, 2300)

Tieto premenné spojíme do jedného dátového rámca:

zamestnanci <- data.frame(Meno, Oddelenie, Plat)
print(zamestnanci)

Základné operácie s údajmi

zamestnanci$Plat                # prístup k jednému stĺpcu
[1] 1450 2100 1800 2300
mean(zamestnanci$Plat)          # priemerný plat
[1] 1912.5
zamestnanci[Oddelenie=="IT", ]  # záznamy z IT oddelenia
zamestnanci[1, ]                # prvý riadok tabuľky
zamestnanci[, 2:3]              # výber 2. a 3. stĺpca
summary(zamestnanci)            # základná štatistika
     Meno            Oddelenie              Plat     
 Length:4           Length:4           Min.   :1450  
 Class :character   Class :character   1st Qu.:1712  
 Mode  :character   Mode  :character   Median :1950  
                                       Mean   :1912  
                                       3rd Qu.:2150  
                                       Max.   :2300  

Rozširovanie údajov

Pridanie stĺpca

NaPolovicnyUvazok <- c(FALSE, TRUE, FALSE, FALSE)
zamestnanci <- cbind(zamestnanci, NaPolovicnyUvazok)
print(zamestnanci)

Pridanie nového riadku

novy.zaznam <- data.frame(
  Meno = "Juraj",
  Oddelenie = "Marketing",
  Plat = 1600,
  NaPolovicnyUvazok = TRUE)

zamestnanci <- rbind(zamestnanci, novy.zaznam)
print(zamestnanci)

Zobrazenie tabuľky pomocou kableExtra

kable(
  zamestnanci,
  caption = "Prehľad zamestnancov firmy",
  digits = 2,
  align = c("l", "l", "r", "c")
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center")
Prehľad zamestnancov firmy
Meno Oddelenie Plat NaPolovicnyUvazok
Peter Marketing 1450 FALSE
Lucia IT 2100 TRUE
Marek Financie 1800 FALSE
Zuzana IT 2300 FALSE
Juraj Marketing 1600 TRUE

Moderný prístup: Tidyverse

Balíček tidyverse združuje nástroje pre analýzu a vizualizáciu údajov. Najčastejšie používame časť dplyr, ktorá uľahčuje výber, úpravu a sumarizáciu dát.

Výber a zoradenie údajov

zamestnanci %>%
  filter(Plat > 1600) %>%
  arrange(desc(Plat)) %>%
  kable(caption = "Zamestnanci s platom nad 1600 €") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center")
Zamestnanci s platom nad 1600 €
Meno Oddelenie Plat NaPolovicnyUvazok
Zuzana IT 2300 FALSE
Lucia IT 2100 TRUE
Marek Financie 1800 FALSE

Zoskupenie a sumarizácia

zamestnanci %>%
  group_by(Oddelenie) %>%
  summarise(
    PriemernyPlat = mean(Plat),
    Pocet = n()
  ) %>%
  kable(
    caption = "Priemerný plat podľa oddelenia",
    col.names = c("Oddelenie", "Priemerný plat", "Počet"),
    align = "c"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center")
Priemerný plat podľa oddelenia
Oddelenie Priemerný plat Počet
Financie 1800 1
IT 2200 2
Marketing 1525 2

Vytváranie novej premennej

zamestnanci %>%
  mutate(
    KategóriaPlatu = case_when(
      Plat >= 2200 ~ "Vysoký",
      Plat >= 1700 ~ "Stredný",
      TRUE ~ "Nízky"
    ),
    Bonus = round(Plat * 0.1, 0)
  ) %>%
  kable(caption = "Kategorizácia platov a bonusov") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center")
Kategorizácia platov a bonusov
Meno Oddelenie Plat NaPolovicnyUvazok KategóriaPlatu Bonus
Peter Marketing 1450 FALSE Nízky 145
Lucia IT 2100 TRUE Stredný 210
Marek Financie 1800 FALSE Stredný 180
Zuzana IT 2300 FALSE Vysoký 230
Juraj Marketing 1600 TRUE Nízky 160
LS0tCnRpdGxlOiAiUHLDoWNhIHMgZGF0YWLDoXpvdSIKYXV0aG9yOiAiQmMuIFPDoXJhIE5pa29sIFNjaG9sdHpvdsOhIgpkYXRlOiAiT2t0b2JlciAyMDI1IgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgY3NzOiBzdHlsZS5jc3MgCmVkaXRvcl9vcHRpb25zOiAKICBtYXJrZG93bjogCiAgICB3cmFwOiA3MgotLS0KYGBge3J9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvID0gVFJVRSwKICBtZXNzYWdlID0gRkFMU0UsCiAgd2FybmluZyA9IEZBTFNFCikKCiMg8J+nqSBBdXRvbWF0aWNrw6Ega29udHJvbGEgYSBpbsWhdGFsw6FjaWEgcG90cmVibsO9Y2ggYmFsw61rb3YgLS0tLQpiYWxpa3kgPC0gYygia2FibGVFeHRyYSIsICJ0aWR5dmVyc2UiLCAia25pdHIiKQoKZm9yIChwa2cgaW4gYmFsaWt5KSB7CiAgaWYgKCFyZXF1aXJlKHBrZywgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkgewogICAgaW5zdGFsbC5wYWNrYWdlcyhwa2csIGRlcGVuZGVuY2llcyA9IFRSVUUpCiAgICBsaWJyYXJ5KHBrZywgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQogIH0KfQoKIyBuYcSNw610YW5pZSBiYWzDrWtvdgpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKIyBQcsOhY2EgcyDDumRham1pCgojIyBUcmFkacSNbsOhIHByw6FjYSBzIGRhdGFiw6F6b3UKTWFqbWUgw7pkYWplIG8gemFtZXN0bmFuY29jaCBtYWxlaiBmaXJteSDigJMgcHJlbWVubsOpOiBNZW5vLCBPZGRlbGVuaWUsIFBsYXQuCmBgYHtyfQojIERlZmlub3ZhbmllIHN0xLpwY292Ck1lbm8gPC0gYygiUGV0ZXIiLCAiTHVjaWEiLCAiTWFyZWsiLCAiWnV6YW5hIikKT2RkZWxlbmllIDwtIGMoIk1hcmtldGluZyIsICJJVCIsICJGaW5hbmNpZSIsICJJVCIpClBsYXQgPC0gYygxNDUwLCAyMTAwLCAxODAwLCAyMzAwKQpgYGAKVGlldG8gcHJlbWVubsOpIHNwb2rDrW1lIGRvIGplZG7DqWhvIGTDoXRvdsOpaG8gcsOhbWNhOgpgYGB7cn0KemFtZXN0bmFuY2kgPC0gZGF0YS5mcmFtZShNZW5vLCBPZGRlbGVuaWUsIFBsYXQpCnByaW50KHphbWVzdG5hbmNpKQpgYGAKIyMgWsOha2xhZG7DqSBvcGVyw6FjaWUgcyDDumRham1pCmBgYHtyfQp6YW1lc3RuYW5jaSRQbGF0ICAgICAgICAgICAgICAgICMgcHLDrXN0dXAgayBqZWRuw6ltdSBzdMS6cGN1Cm1lYW4oemFtZXN0bmFuY2kkUGxhdCkgICAgICAgICAgIyBwcmllbWVybsO9IHBsYXQKemFtZXN0bmFuY2lbT2RkZWxlbmllPT0iSVQiLCBdICAjIHrDoXpuYW15IHogSVQgb2RkZWxlbmlhCnphbWVzdG5hbmNpWzEsIF0gICAgICAgICAgICAgICAgIyBwcnbDvSByaWFkb2sgdGFidcS+a3kKemFtZXN0bmFuY2lbLCAyOjNdICAgICAgICAgICAgICAjIHbDvWJlciAyLiBhIDMuIHN0xLpwY2EKc3VtbWFyeSh6YW1lc3RuYW5jaSkgICAgICAgICAgICAjIHrDoWtsYWRuw6EgxaF0YXRpc3Rpa2EKYGBgCiMgUm96xaFpcm92YW5pZSDDumRham92CgojIyBQcmlkYW5pZSBzdMS6cGNhCmBgYHtyfQpOYVBvbG92aWNueVV2YXpvayA8LSBjKEZBTFNFLCBUUlVFLCBGQUxTRSwgRkFMU0UpCnphbWVzdG5hbmNpIDwtIGNiaW5kKHphbWVzdG5hbmNpLCBOYVBvbG92aWNueVV2YXpvaykKcHJpbnQoemFtZXN0bmFuY2kpCmBgYAojIyBQcmlkYW5pZSBub3bDqWhvIHJpYWRrdQpgYGB7cn0Kbm92eS56YXpuYW0gPC0gZGF0YS5mcmFtZSgKICBNZW5vID0gIkp1cmFqIiwKICBPZGRlbGVuaWUgPSAiTWFya2V0aW5nIiwKICBQbGF0ID0gMTYwMCwKICBOYVBvbG92aWNueVV2YXpvayA9IFRSVUUpCgp6YW1lc3RuYW5jaSA8LSByYmluZCh6YW1lc3RuYW5jaSwgbm92eS56YXpuYW0pCnByaW50KHphbWVzdG5hbmNpKQpgYGAKIyBab2JyYXplbmllIHRhYnXEvmt5IHBvbW9jb3Uga2FibGVFeHRyYQpgYGB7cn0Ka2FibGUoCiAgemFtZXN0bmFuY2ksCiAgY2FwdGlvbiA9ICJQcmVoxL5hZCB6YW1lc3RuYW5jb3YgZmlybXkiLAogIGRpZ2l0cyA9IDIsCiAgYWxpZ24gPSBjKCJsIiwgImwiLCAiciIsICJjIikKKSAlPiUKICBrYWJsZV9zdHlsaW5nKAogICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksCiAgICBmdWxsX3dpZHRoID0gRkFMU0UsCiAgICBwb3NpdGlvbiA9ICJjZW50ZXIiKQpgYGAKIyBNb2Rlcm7DvSBwcsOtc3R1cDogVGlkeXZlcnNlCgpCYWzDrcSNZWsgdGlkeXZlcnNlIHpkcnXFvnVqZSBuw6FzdHJvamUgcHJlIGFuYWzDvXp1IGEgdml6dWFsaXrDoWNpdSDDumRham92LiBOYWrEjWFzdGVqxaFpZSBwb3XFvsOtdmFtZSDEjWFzxaUgZHBseXIsIGt0b3LDoSB1xL5haMSNdWplIHbDvWJlciwgw7pwcmF2dSBhIHN1bWFyaXrDoWNpdSBkw6F0LgoKIyMgVsO9YmVyIGEgem9yYWRlbmllIMO6ZGFqb3YKYGBge3J9CnphbWVzdG5hbmNpICU+JQogIGZpbHRlcihQbGF0ID4gMTYwMCkgJT4lCiAgYXJyYW5nZShkZXNjKFBsYXQpKSAlPiUKICBrYWJsZShjYXB0aW9uID0gIlphbWVzdG5hbmNpIHMgcGxhdG9tIG5hZCAxNjAwIOKCrCIpICU+JQogIGthYmxlX3N0eWxpbmcoCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwKICAgIGZ1bGxfd2lkdGggPSBGQUxTRSwKICAgIHBvc2l0aW9uID0gImNlbnRlciIpCmBgYAojIyBab3NrdXBlbmllIGEgc3VtYXJpesOhY2lhCmBgYHtyfQp6YW1lc3RuYW5jaSAlPiUKICBncm91cF9ieShPZGRlbGVuaWUpICU+JQogIHN1bW1hcmlzZSgKICAgIFByaWVtZXJueVBsYXQgPSBtZWFuKFBsYXQpLAogICAgUG9jZXQgPSBuKCkKICApICU+JQogIGthYmxlKAogICAgY2FwdGlvbiA9ICJQcmllbWVybsO9IHBsYXQgcG9kxL5hIG9kZGVsZW5pYSIsCiAgICBjb2wubmFtZXMgPSBjKCJPZGRlbGVuaWUiLCAiUHJpZW1lcm7DvSBwbGF0IiwgIlBvxI1ldCIpLAogICAgYWxpZ24gPSAiYyIKICApICU+JQogIGthYmxlX3N0eWxpbmcoCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwKICAgIGZ1bGxfd2lkdGggPSBGQUxTRSwKICAgIHBvc2l0aW9uID0gImNlbnRlciIpCmBgYAojIyBWeXR2w6FyYW5pZSBub3ZlaiBwcmVtZW5uZWoKYGBge3J9CnphbWVzdG5hbmNpICU+JQogIG11dGF0ZSgKICAgIEthdGVnw7NyaWFQbGF0dSA9IGNhc2Vfd2hlbigKICAgICAgUGxhdCA+PSAyMjAwIH4gIlZ5c29rw70iLAogICAgICBQbGF0ID49IDE3MDAgfiAiU3RyZWRuw70iLAogICAgICBUUlVFIH4gIk7DrXpreSIKICAgICksCiAgICBCb251cyA9IHJvdW5kKFBsYXQgKiAwLjEsIDApCiAgKSAlPiUKICBrYWJsZShjYXB0aW9uID0gIkthdGVnb3JpesOhY2lhIHBsYXRvdiBhIGJvbnVzb3YiKSAlPiUKICBrYWJsZV9zdHlsaW5nKAogICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksCiAgICBmdWxsX3dpZHRoID0gRkFMU0UsCiAgICBwb3NpdGlvbiA9ICJjZW50ZXIiKQpgYGAKCgo=