Spracované a inšpirované Notebookom Jason Locklin: Introduction to R for Education Data Analysis and Visualization
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("Adam", "Filip", "Barbora")
Vek = c(24, 22, 19)
Body = c(77, 99, 58)Tieto tri premenné nie sú zatiaľ nijako prepojené, predstavujú izolované stĺpce tabuľky. Do tabuľky ich spojíme nasledovne
Vysvetlenie: DataFrame má tri stĺpce: Meno, Vek a Body. Niektoré operácie s údajmi organizovanými v .data.frame. sú uvedené nasledovne
[1] 24 22 19
[1] 21.66667
[1] "Adam"
Meno Vek Body
Length:3 Min. :19.00 Min. :58.0
Class :character 1st Qu.:20.50 1st Qu.:67.5
Mode :character Median :22.00 Median :77.0
Mean :21.67 Mean :78.0
3rd Qu.:23.00 3rd Qu.:88.0
Max. :24.00 Max. :99.0
Ak chceme pridať k tabuľke dodatočný stĺpec, potom to robíme nasledovne
Ak chceme pridať riadok, potom
# New record (must match column order/types)
novy.riadok <- data.frame(Meno = "Zuzana", Vek = 45, Body = 44,Zadaný = FALSE)
# Append
udaje <- rbind(udaje, novy.riadok)
print(udaje)library(knitr)
library(kableExtra)
kable(
udaje,
# format,
digits = 2,
# row.names = NA,
# col.names = NA,
align=c("l","c","l","r"),
caption = "Tabuľka"
# label = NULL,
# format.args = list(),
# escape = TRUE,
# ...
) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center")| Meno | Vek | Body | Zadaný |
|---|---|---|---|
| Adam | 24 | 77 | TRUE |
| Filip | 22 | 99 | FALSE |
| Barbora | 19 | 58 | TRUE |
| Zuzana | 45 | 44 | FALSE |
Tidyverse je súbor knižníc, ktoré majú zjednodušiť prácu s údajmi. Majú jednotný komunikačný štandard, vzájomne sa doplňujú.
.dplyr. poskytuje základné možnosti manipulácie s údajmi, ako napr.:
filter(): vyberá riadky
select(): vyberá stĺpce
mutate(): vytvára nové stĺpce tabuľky
arrange(): triedi riadky
summarise(): sumarizuje
V nasledovnej ukážke využijeme tzv. .pipes. %>% alebo %<% umožňuje posielať výsledky z jednej funkcie priamo do volanie nasledovnej funkcie. To umožňuje ľahšiu čitateľnosť kódov, konvencia sa ujala a má široké použitie.
# výber a následné triedenie
udaje %>%
filter(Body > 45) %>% # vybera zaznamy s poctom bodov viac, ako 45
arrange(desc(Body)) %>% # vysledny subor triedi zostupne podla premennej Body
kable %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)| Meno | Vek | Body | Zadaný |
|---|---|---|---|
| Filip | 22 | 99 | FALSE |
| Adam | 24 | 77 | TRUE |
| Barbora | 19 | 58 | TRUE |
# Zoskupí and sumarizuje
udaje %>%
group_by(Zadaný) %>% # zoskupi zaznamy podla premennej Zadaný a vypocita za kazdu skupinu jej priemer Body
summarise( # a taktiez spocita pocetnosti oboch skupin
Priem.Body = mean(Body),
count = n()
) %>%
kable(
caption = "Priemerné Body podľa premennej Zadaný",
col.names = c("Zadaný", "Priemer Body", "Počet"),
align = "c"
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)| Zadaný | Priemer Body | Počet |
|---|---|---|
| FALSE | 71.5 | 2 |
| TRUE | 67.5 | 2 |
# Vytváranie novej premennej
udaje %>%
mutate(
grade = case_when( # vytvara novu premennu grade podla nasledovnej relacnej schemy
Body >= 80 ~ "A",
Body >= 70 ~ "B",
Body >= 60 ~ "C",
TRUE ~ "D"
),
VekPoPlnoletosti = round(Vek-18,0)
) %>%
kable %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
) | Meno | Vek | Body | Zadaný | grade | VekPoPlnoletosti |
|---|---|---|---|---|---|
| Adam | 24 | 77 | TRUE | B | 6 |
| Filip | 22 | 99 | FALSE | A | 4 |
| Barbora | 19 | 58 | TRUE | D | 1 |
| Zuzana | 45 | 44 | FALSE | D | 27 |