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("Peter", "Adam", "Erik")
Vek = c(11, 12, 10)
Body = c(87, 94, 80)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] 11 12 10
[1] 11
[1] 12
Meno Vek Body
Length:3 Min. :10.0 Min. :80.0
Class :character 1st Qu.:10.5 1st Qu.:83.5
Mode :character Median :11.0 Median :87.0
Mean :11.0 Mean :87.0
3rd Qu.:11.5 3rd Qu.:90.5
Max. :12.0 Max. :94.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 = "Richard", Vek = 22.755, Body = 44,MaAuto = FALSE)
# Append (upr.)
udaje <- rbind(udaje, novy.riadok)
print(udaje)library(knitr)
library(kableExtra)
kable(
udaje,
# format, (upr.)
digits = 3,
# row.names = NA,
# col.names = NA,
align=c("l","c","l","r"),
caption = "Toto je tabuľka"
# label = NULL,
# format.args = list(),
# escape = TRUE,
# ... (upr.)
) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center")| Meno | Vek | Body | MaAuto |
|---|---|---|---|
| Peter | 11.000 | 87 | TRUE |
| Adam | 12.000 | 94 | FALSE |
| Erik | 10.000 | 80 | TRUE |
| Richard | 22.755 | 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 > 52) %>% # vybera zaznamy s poctom bodov viac, ako 50
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 | MaAuto |
|---|---|---|---|
| Adam | 12 | 94 | FALSE |
| Peter | 11 | 87 | TRUE |
| Erik | 10 | 80 | TRUE |
# Zoskupí and sumarizuje
udaje %>%
group_by(MaAuto) %>% # zoskupi zaznamy podla premennej MaAuto 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 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 | 69.0 | 2 |
| TRUE | 83.5 | 2 |
# Vytváranie novej premennej
udaje %>%
mutate(
grade = case_when( # vytvara novu premennu grade podla nasledovnej relacnej schemy
Body >= 92 ~ "A",
Body >= 82 ~ "B",
Body >= 72 ~ "C",
TRUE ~ "D"
),
VekPoPlnoletosti = round(Vek-20,1)
) %>%
kable %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
) | Meno | Vek | Body | MaAuto | grade | VekPoPlnoletosti |
|---|---|---|---|---|---|
| Peter | 11.000 | 87 | TRUE | B | -9.0 |
| Adam | 12.000 | 94 | FALSE | A | -8.0 |
| Erik | 10.000 | 80 | TRUE | C | -10.0 |
| Richard | 22.755 | 44 | FALSE | D | 2.8 |