Pre prácu s údajmi (databázou) používame najčastejšie dátový typ
.data.frame
. Je to tabuľka, ktorá pozostáva zo stĺpcov
rozličných typov. Jeden riadok pritom predstavuje jeden záznam
databázy.
Majme údaje o žiakoch, ktoré predstavujú tri premenné -
Meno
, Vek
a Body
:
# Working with data frames
Meno <- c("Jana", "Jozef", "Mária")
Vek <- c(10, 11, 9)
Body <- c(85, 92, 78)
Tieto tri premenné nie sú zatiaľ nijako prepojené, predstavujú izolované stĺpce tabuľky. Do tabuľky ich spojíme nasledovne:
udaje <- data.frame(Meno, Vek, Body)
print(udaje)
## Meno Vek Body
## 1 Jana 10 85
## 2 Jozef 11 92
## 3 Mária 9 78
Vysvetlenie: DataFrame má tri stĺpce: Meno
,
Vek
a Body
. Niektoré operácie s údajmi
organizovanými v data.frame
sú uvedené nasledovne:
udaje$Vek # adresovanie premennej v data.frame
## [1] 10 11 9
mean(udaje$Vek) # priemerný vek
## [1] 10
udaje[Meno == "Jozef", ] # adresovanie celého riadku podľa podmienky
## Meno Vek Body
## 2 Jozef 11 92
udaje[3, ] # adresovanie celého 3. riadku
## Meno Vek Body
## 3 Mária 9 78
udaje[, 2:3] # druhý a tretí stĺpec tabuľky
## Vek Body
## 1 10 85
## 2 11 92
## 3 9 78
udaje[1, 1] # jedna bunka tabuľky
## [1] "Jana"
summary(udaje) # základná deskriptívna štatistika
## Meno Vek Body
## Length:3 Min. : 9.0 Min. :78.0
## Class :character 1st Qu.: 9.5 1st Qu.:81.5
## Mode :character Median :10.0 Median :85.0
## Mean :10.0 Mean :85.0
## 3rd Qu.:10.5 3rd Qu.:88.5
## Max. :11.0 Max. :92.0
Ak chceme pridať k tabuľke dodatočný stĺpec, použijeme
cbind()
alebo priamy zápis cez $
:
MaAuto <- c(TRUE, FALSE, TRUE)
udaje <- cbind(udaje, MaAuto)
# alternatíva: udaje$MaAuto <- c(TRUE, FALSE, TRUE)
udaje
## Meno Vek Body MaAuto
## 1 Jana 10 85 TRUE
## 2 Jozef 11 92 FALSE
## 3 Mária 9 78 TRUE
Ak chceme pridať riadok, potom:
# Nový záznam (musí sedieť poradie/typy stĺpcov)
novy.riadok <- data.frame(Meno = "Diana", Vek = 22.485, Body = 42, MaAuto = FALSE)
# Pripojenie riadku
udaje <- rbind(udaje, novy.riadok)
udaje
## Meno Vek Body MaAuto
## 1 Jana 10.000 85 TRUE
## 2 Jozef 11.000 92 FALSE
## 3 Mária 9.000 78 TRUE
## 4 Diana 22.485 42 FALSE
library(knitr)
library(kableExtra)
kable(
udaje,
digits = 2,
align = c("l", "c", "r", "c"),
caption = "Toto je tabuľka"
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)
Meno | Vek | Body | MaAuto |
---|---|---|---|
Jana | 10.00 | 85 | TRUE |
Jozef | 11.00 | 92 | FALSE |
Mária | 9.00 | 78 | TRUE |
Diana | 22.48 | 42 | FALSE |
Tidyverse je súbor knižníc, ktoré majú zjednodušiť prácu s údajmi. Majú jednotný komunikačný štandard a vzájomne sa dopĺňajú.
# Load tidyverse
library(tidyverse)
dplyr
poskytuje základné možnosti manipulácie s údajmi,
ako napr.:
filter()
– výber riadkovselect()
– výber stĺpcovmutate()
– tvorba nových stĺpcovarrange()
– triedenie riadkovsummarise()
– sumarizáciaV nasledovnej ukážke využijeme tzv. pipes
%>%
, ktoré umožňujú posielať výsledky z jednej funkcie
priamo do závere ďalšej funkcie.
udaje %>%
filter(Body > 50) %>% # vyberá záznamy s Body > 50
arrange(desc(Body)) %>% # triedi zostupne podľa Body
kable(caption = "Žiaci s Body > 50, zoradení zostupne",
align = c("l","c","r","c")) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)
Meno | Vek | Body | MaAuto |
---|---|---|---|
Jozef | 11 | 92 | FALSE |
Jana | 10 | 85 | TRUE |
Mária | 9 | 78 | TRUE |
udaje %>%
group_by(MaAuto) %>% # zoskupí podľa MaAuto
summarise(
Priem_Body = mean(Body, na.rm = TRUE),
Pocet = n()
) %>%
kable(
caption = "Priemerné Body podľa premennej MaAuto",
col.names = c("Má Auto", "Priemer Body", "Počet"),
align = "c"
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)
Má Auto | Priemer Body | Počet |
---|---|---|
FALSE | 67.0 | 2 |
TRUE | 81.5 | 2 |
udaje %>%
mutate(
grade = case_when( # vytvára novú premennú grade
Body >= 90 ~ "A",
Body >= 80 ~ "B",
Body >= 70 ~ "C",
TRUE ~ "D"
),
VekPoPlnoletosti = round(Vek - 18, 0)
) %>%
kable(caption = "Doplnené premenné: grade a VekPoPlnoletosti") %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)
Meno | Vek | Body | MaAuto | grade | VekPoPlnoletosti |
---|---|---|---|---|---|
Jana | 10.000 | 85 | TRUE | B | -8 |
Jozef | 11.000 | 92 | FALSE | A | -7 |
Mária | 9.000 | 78 | TRUE | C | -9 |
Diana | 22.485 | 42 | FALSE | D | 4 |
library(ggplot2)
# Stĺpcový graf bodov podľa mena
udaje %>%
ggplot(aes(x = Meno, y = Body, fill = MaAuto)) +
geom_col() +
labs(
title = "Body podľa žiakov",
x = "Meno",
y = "Body",
fill = "Má auto"
) +
theme_minimal()
# Ďalšia tabuľka s dodatočnými informáciami
vozidlo <- tibble(
Meno = c("Jana", "Mária", "Diana", "Jozef"),
Typ = c("hatchback", "sedan", "SUV", "coupe")
)
udaje %>%
left_join(vozidlo, by = "Meno") %>%
kable(caption = "Left join: informácia o type vozidla podľa mena") %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)
Meno | Vek | Body | MaAuto | Typ |
---|---|---|---|---|
Jana | 10.000 | 85 | TRUE | hatchback |
Jozef | 11.000 | 92 | FALSE | coupe |
Mária | 9.000 | 78 | TRUE | sedan |
Diana | 22.485 | 42 | FALSE | SUV |