Úvod
Krátky dokument, v ktorom pracujem s data.frame,
ukážem adresovanie stĺpcov/riadkov, pridávanie
stĺpcov/riadkov (cbind/rbind), sumarizáciu a
filtrovanie pomocou dplyr
a krátko
grafy s ggplot2
. Tabuľky formátujem cez
knitr::kable()
a
kableExtra::kable_styling()
Základ: vytvorenie data.frame a adresovanie
Vytvorím jednoduché údaje o študentoch (moje vlastné hodnoty) a
ukážem prácu so stĺpcami a riadkami.
Meno <- c("Jozef","Anna","Mária")
Vek <- c(21.2, 19.7, 22.5)
Body <- c(78, 91, 84)
udaje <- data.frame(Meno, Vek, Body)
udaje %>%
kable(digits = 2, align = c("l","r","r"), caption = "Základná tabuľka") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Základná tabuľka
Meno
|
Vek
|
Body
|
Jozef
|
21.2
|
78
|
Anna
|
19.7
|
91
|
Mária
|
22.5
|
84
|
Adresovanie stĺpcov/riadkov a pár rýchlych výpočtov:
# prístup k stĺpcu
udaje$Vek
## [1] 21.2 19.7 22.5
## [1] 21.13333
# filtrovanie riadkov podľa mena
udaje[udaje$Meno == "Jozef", ]
## Meno Vek Body
## 1 Jozef 21.2 78
# výber riadkov a stĺpcov podľa indexov
udaje[1, ] # prvý riadok
## Meno Vek Body
## 1 Jozef 21.2 78
udaje[, 2:3] # druhý a tretí stĺpec
## Vek Body
## 1 21.2 78
## 2 19.7 91
## 3 22.5 84
Pridanie stĺpca a riadku (cbind / rbind)
MaAuto <- c(TRUE, FALSE, TRUE)
udaje <- cbind(udaje, MaAuto)
novy.riadok <- data.frame(Meno = "Diana", Vek = 20.4, Body = 88, MaAuto = FALSE)
udaje <- rbind(udaje, novy.riadok)
udaje %>%
kable(digits = 2, align = c("l","r","r","c"),
caption = "Po pridaní stĺpca a riadku (cbind/rbind)") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Po pridaní stĺpca a riadku (cbind/rbind)
Meno
|
Vek
|
Body
|
MaAuto
|
Jozef
|
21.2
|
78
|
TRUE
|
Anna
|
19.7
|
91
|
FALSE
|
Mária
|
22.5
|
84
|
TRUE
|
Diana
|
20.4
|
88
|
FALSE
|
Malé cvičenie – filter, select, arrange, mutate, summarise
Použijem rovnakú tabuľku a ukážem základné dplyr príkazy.
sumar <- udaje %>%
select(Meno, Vek, Body, MaAuto) %>%
mutate(Body_zaokruh = round(Body, 0)) %>%
arrange(desc(Body_zaokruh))
sumar %>%
kable(caption = "Zoradenie podľa Body (desc) + nový stĺpec Body_zaokruh") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Zoradenie podľa Body (desc) + nový stĺpec Body_zaokruh
Meno
|
Vek
|
Body
|
MaAuto
|
Body_zaokruh
|
Anna
|
19.7
|
91
|
FALSE
|
91
|
Diana
|
20.4
|
88
|
FALSE
|
88
|
Mária
|
22.5
|
84
|
TRUE
|
84
|
Jozef
|
21.2
|
78
|
TRUE
|
78
|
udaje %>%
group_by(MaAuto) %>%
summarise(priemerny_vek = mean(Vek), priemerne_body = mean(Body), .groups = "drop") %>%
kable(digits = 2, caption = "Zoskupenie (group_by) a sumarizácia (summarise)") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Zoskupenie (group_by) a sumarizácia (summarise)
MaAuto
|
priemerny_vek
|
priemerne_body
|
FALSE
|
20.05
|
89.5
|
TRUE
|
21.85
|
81.0
|
Práca s dátami v čase (moje vlastné údaje)
Vytvorím malú databázu predajov s dátumami (časovo usporiadané
údaje).
predaje <- data.frame(
Dátum = as.Date(c("2025-09-28","2025-09-29","2025-09-30","2025-10-01","2025-10-02")),
Produkt = c("Proteín","Tyčinka","Shaker","Proteín","Proteín"),
Ks = c(2, 10, 3, 1, 2),
Cena = c(22.9, 1.9, 6.0, 23.5, 22.0)
)
predaje %>%
kable(caption = "Vstupné predaje (časovo usporiadané)") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Vstupné predaje (časovo usporiadané)
Dátum
|
Produkt
|
Ks
|
Cena
|
2025-09-28
|
Proteín
|
2
|
22.9
|
2025-09-29
|
Tyčinka
|
10
|
1.9
|
2025-09-30
|
Shaker
|
3
|
6.0
|
2025-10-01
|
Proteín
|
1
|
23.5
|
2025-10-02
|
Proteín
|
2
|
22.0
|
sumar_predaje <- predaje %>%
mutate(Tržba = Ks * Cena) %>%
arrange(Dátum)
sumar_predaje %>%
kable(digits = 2, caption = "Predaje s tržbou, zoradené podľa dátumu") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Predaje s tržbou, zoradené podľa dátumu
Dátum
|
Produkt
|
Ks
|
Cena
|
Tržba
|
2025-09-28
|
Proteín
|
2
|
22.9
|
45.8
|
2025-09-29
|
Tyčinka
|
10
|
1.9
|
19.0
|
2025-09-30
|
Shaker
|
3
|
6.0
|
18.0
|
2025-10-01
|
Proteín
|
1
|
23.5
|
23.5
|
2025-10-02
|
Proteín
|
2
|
22.0
|
44.0
|
Počty a tržby podľa produktu
podla_produktu <- sumar_predaje %>%
group_by(Produkt) %>%
summarise(objednavok = n(), spolu_ks = sum(Ks), spolu_trzba = sum(Tržba), .groups = "drop") %>%
arrange(desc(spolu_trzba))
podla_produktu %>%
kable(digits = 2, caption = "Sumár podľa produktu") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Sumár podľa produktu
Produkt
|
objednavok
|
spolu_ks
|
spolu_trzba
|
Proteín
|
3
|
5
|
113.3
|
Tyčinka
|
1
|
10
|
19.0
|
Shaker
|
1
|
3
|
18.0
|
# počty záznamov cez count()
sumar_predaje %>%
count(Produkt) %>%
kable(caption = "Počet záznamov cez count(Produkt)") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Počet záznamov cez count(Produkt)
Produkt
|
n
|
Proteín
|
3
|
Shaker
|
1
|
Tyčinka
|
1
|
Grafy (ggplot2)
# Tržba v čase (čiarový graf)
ggplot(sumar_predaje, aes(x = Dátum, y = Tržba)) +
geom_line() +
geom_point() +
labs(title = "Denná tržba v čase", x = "Dátum", y = "Tržba")

# Tržba podľa produktu (stĺpcový graf)
ggplot(podla_produktu, aes(x = Produkt, y = spolu_trzba)) +
geom_col() +
labs(title = "Tržba podľa produktu", x = "Produkt", y = "Spolu tržba")

Malé cvičenie – import z CSV
Nižšie demonštrujem použitie read.csv2()
(ako v pôvodnom
Rmd), ale bez externej závislosti: vytvorím krátky CSV text v pamäti a
načítam ho.
csv_text <- "Dátum;Produkt;Ks;Cena
2025-10-01;Proteín;1;23,5
2025-10-02;Tyčinka;12;1,9
2025-10-03;Shaker;2;6,0"
con <- textConnection(csv_text, encoding = "UTF-8")
predaje_csv <- read.csv2(con, header = TRUE, sep = ";", dec = ",")
close(con)
predaje_csv %>%
kable(caption = "Načítané z CSV (read.csv2) cez textConnection") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Načítané z CSV (read.csv2) cez textConnection
Dátum
|
Produkt
|
Ks
|
Cena
|
2025-10-01
|
Proteín
|
1
|
23.5
|
2025-10-02
|
Tyčinka
|
12
|
1.9
|
2025-10-03
|
Shaker
|
2
|
6.0
|
Môj návrh použitia novinky
Nižšie sú dve drobné „novinky“ oproti pôvodnému dokumentu:
case_when()
– kategorizácia tržby na
nízka/stredná/vysoká.
slice_max()
– rýchly výber TOP dní podľa tržby.
novinky <- sumar_predaje %>%
mutate(
kateg_trzby = dplyr::case_when(
Tržba < 10 ~ "nízka",
Tržba < 25 ~ "stredná",
TRUE ~ "vysoká"
)
)
novinky %>%
kable(caption = "Kategorizovaná tržba cez case_when()") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
Kategorizovaná tržba cez case_when()
Dátum
|
Produkt
|
Ks
|
Cena
|
Tržba
|
kateg_trzby
|
2025-09-28
|
Proteín
|
2
|
22.9
|
45.8
|
vysoká
|
2025-09-29
|
Tyčinka
|
10
|
1.9
|
19.0
|
stredná
|
2025-09-30
|
Shaker
|
3
|
6.0
|
18.0
|
stredná
|
2025-10-01
|
Proteín
|
1
|
23.5
|
23.5
|
stredná
|
2025-10-02
|
Proteín
|
2
|
22.0
|
44.0
|
vysoká
|
top_dni <- novinky %>%
dplyr::slice_max(order_by = Tržba, n = 2, with_ties = FALSE)
top_dni %>%
kable(caption = "TOP 2 dni podľa tržby (slice_max)") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, position = "center")
TOP 2 dni podľa tržby (slice_max)
Dátum
|
Produkt
|
Ks
|
Cena
|
Tržba
|
kateg_trzby
|
2025-09-28
|
Proteín
|
2
|
22.9
|
45.8
|
vysoká
|
2025-10-02
|
Proteín
|
2
|
22.0
|
44.0
|
vysoká
|