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)
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=