knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)
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("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
print(udaje$Vek) # takto adresujeme jednotlivé premenné v data.frame
## [1] 10 11 9
print(mean(udaje$Vek)) # priemerny vek
## [1] 10
print(udaje[Meno=="Jozef",]) # adresovanie celého riadku
## Meno Vek Body
## 2 Jozef 11 92
print(udaje[3,]) # ina moznost adresovania celeho riadku
## Meno Vek Body
## 3 Mária 9 78
print(udaje[,2:3]) # vypisanie druheho a tretieho stlpca tabulky
## Vek Body
## 1 10 85
## 2 11 92
## 3 9 78
print(udaje[1,1]) # vypisanie jednej bunky tabulky
## [1] "Jana"
summary(udaje) # zakladna deskriptivna statistika celej tabulky
## 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, potom to robíme nasledovne
MaAuto <- c(TRUE,FALSE,TRUE)
udaje <- cbind(udaje,MaAuto)
print(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
# New record (must match column order/types)
novy.riadok <- data.frame(Meno = "Diana", Vek = 22.485, Body = 42,MaAuto = FALSE)
# Append
udaje <- rbind(udaje, novy.riadok)
print(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,
# format,
digits = 2,
# row.names = NA,
# col.names = NA,
align=c("l","c","l","r"),
caption = "Toto je 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 | 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, vzájomne sa doplňujú.
# Load tidyverse
library(tidyverse)
.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 > 50) %>% # 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 |
|---|---|---|---|
| Jozef | 11 | 92 | FALSE |
| Jana | 10 | 85 | TRUE |
| Mária | 9 | 78 | 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 | 67.0 | 2 |
| TRUE | 81.5 | 2 |
# Vytváranie novej premennej
udaje %>%
mutate(
grade = case_when( # vytvara novu premennu grade podla nasledovnej relacnej schemy
Body >= 90 ~ "A",
Body >= 80 ~ "B",
Body >= 70 ~ "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 | 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(datasets)
# datasets available in the 'datasets' package - nasledovne kody za mna urobil Chat GPT
ds <- as.data.frame(utils::data(package = "datasets")$results)[, c("Item","Title")]
knitr::kable(head(ds, 20), col.names = c("Dataset", "Title")) # prvych 20 databaz
| Dataset | Title |
|---|---|
| AirPassengers | Monthly Airline Passenger Numbers 1949-1960 |
| BJsales | Sales Data with Leading Indicator |
| BJsales.lead (BJsales) | Sales Data with Leading Indicator |
| BOD | Biochemical Oxygen Demand |
| CO2 | Carbon Dioxide Uptake in Grass Plants |
| ChickWeight | Weight versus age of chicks on different diets |
| DNase | Elisa assay of DNase |
| EuStockMarkets | Daily Closing Prices of Major European Stock Indices, 1991-1998 |
| Formaldehyde | Determination of Formaldehyde |
| HairEyeColor | Hair and Eye Color of Statistics Students |
| Harman23.cor | Harman Example 2.3 |
| Harman74.cor | Harman Example 7.4 |
| Indometh | Pharmacokinetics of Indomethacin |
| InsectSprays | Effectiveness of Insect Sprays |
| JohnsonJohnson | Quarterly Earnings per Johnson & Johnson Share |
| LakeHuron | Level of Lake Huron 1875-1972 |
| LifeCycleSavings | Intercountry Life-Cycle Savings Data |
| Loblolly | Growth of Loblolly Pine Trees |
| Nile | Flow of the River Nile |
| Orange | Growth of Orange Trees |
# kniznica datasets obsahuje databazu nazvanu CO2. Mozeme sa na nu odvolavat nasledovne, ako napr.
head(CO2)
Môžeme použiť aj databázu určenú pre ekobometriu - package Wooldridge
# install.packages("wooldridge")
library(wooldridge)
ds <- as.data.frame(utils::data(package = "wooldridge")$results)[, c("Item","Title")]
knitr::kable(head(ds, 20), col.names = c("Dataset", "Title")) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)
| Dataset | Title |
|---|---|
| admnrev | admnrev |
| affairs | affairs |
| airfare | airfare |
| alcohol | alcohol |
| apple | apple |
| approval | approval |
| athlet1 | athlet1 |
| athlet2 | athlet2 |
| attend | attend |
| audit | audit |
| barium | barium |
| beauty | beauty |
| benefits | benefits |
| beveridge | beveridge |
| big9salary | big9salary |
| bwght | bwght |
| bwght2 | bwght2 |
| campus | campus |
| card | card |
| catholic | catholic |
Ja som si zvolil údaje z [Abosede Tiamiyu: Environmental, Social, and Governance Reporting Evidencing Firm Performance in Emerging Economy]{https://data.mendeley.com/datasets/7k8pjhsrwb/1}. Na stránke sa nachádza súbor .Dataset ESG and Firm Performance.xlsx., ktorý som si stiahol a exportoval do formátu csv. Ako oddeľovač položiek som si zvolil bodkočiarku (semicolon ;), vyžívam desatinnú bodku a nie čiarku a tiež textové premenné uvádzam apostrofmi “. V prvom riadku sa nachádzajú názvy stĺpcov, ktoré neskôr budú vystupovať ako premenné. Tie obsahujú medzery, čo je v zázve premennej neprípustné a nahradil som ich podtrhovátkom”.”.
Potom už stačí importovať údaje do .data.frame., a to nasledovne
udaje <- read.csv2("udaje/depression-covid.csv",header=TRUE,sep=";",dec=".")
head(udaje) # niekolko prvych riadkov
colnames(udaje) # nazvy premennych
## [1] "GROUP.Gender.AGE.BMI.QUALITYOFLIFE.ACTIVITY3.PAINDISCOMFORT4.ANXIETYDEPERESION5.HADSD.HADSA.HR.SO2.MAPSE.FE.TAPSE.SPAP.FAC.CRP.WEEKSSINCEDIAGNOSES.NROFRESTANTSIMPTOMES.PCSF.DAYSOFHOSPITALIZATION.PULMONARYINJURY.E_A.E_e.weeks.HADS_D_cat.HADS_A_cat"