## Výpočty (-2 + 3.5) / 2 # jednoduché výpočty, pozor: čísla s desetinnými tečkami sqrt(9) # odmocnina ## Vektory a faktorové proměnné kostka <- c(4, 1, 1, 5, 3) # Vektor několika hodů kostkou print(kostka) # vypsání obsahu proměnné spokojenostObed <- c(TRUE, TRUE, FALSE, TRUE) # logické hodnoty pohlavi <- c("muž", "muž", "žena", "muž", "žena") # řetězce pohlavi2 <- factor(pohlavi) # převod na faktorovou proměnnou # řadová proměnná vzdelani <- factor(c("VŠ", "SŠ", "ZŠ", "SŠ", "VŠ", "VŠ"), ordered = TRUE, levels = c("ZŠ", "SŠ", "VŠ")) class(pohlavi) # zjištění typu proměnné class(pohlavi2) class(vzdelani) ## Základní výpočty teploty <- c(3.2, 4.8, 0.2, -1.5) length(teploty) # počet hodnot ve vektoru sum(teploty) # součet hodnot mean(teploty) # průměrná hodnota sum(teploty)/length(teploty) # je ten průměr správně? zdá se, že ano median(teploty) # medián sd(teploty) # výběrová směrodatná odchylka var(teploty) # výběrový rozptyl ?mean # nápověda k funkci ?':' # nápověda k operátoru ?'for' # nápověda k příkazu table(vzdelani) # souhrnný počet zastoupení jednotlivých kategorií barplot(table(vzdelani)) # sloupcový graf souhrnu - "histogram" pro faktorové proměnné ## Generování hodnot podle pravidel, hody kostkou apod. 2:8 # vektor čísel s rozsahem hodnot 2 až 8 (krok +1) 8:2 # vektor čísel s rozsahem hodnot 8 až 2 (krok -1) seq(2, 8) # stejné, jako 2:8 seq(8, 2) # stejné, jako 8:2 seq(2, 8, by = 0.5) # specifikace kroku seq(2, 8, length.out = 6) # specifikace počtu čísel, krok se vypočte automaticky seq(from = 1, to = 5) # výslovné určení názvu argumentů seq(to = 5, from = 1) # to samé sample(1:6, size = 20, replace = TRUE) # náhodné hody kostkou sample(c(0, 1), size = 20, replace = TRUE) # náhodné hody mincí (např. 0 = rub, 1 = líc) sample(c(0, 1), size = 20, replace = TRUE, prob = c(0.2, 0.8)) # nevyvážená mince normalniMince <- sample(c(0, 1), size = 10000, replace = TRUE) # hodně hodů mean(normalniMince) # průměrná hodnota by měla být okolo 0.5 nevyvazenaMince <- sample(c(0, 1), size = 10000, replace = TRUE, prob = c(0.2, 0.8)) # hodně hodů mean(nevyvazenaMince) # průměrná hodnota by měla být okolo 0.8 sample(c("muž", "žena"), size = 20, replace = TRUE) # náhodné generování muž a žena sample(factor(c("muž", "žena")), size = 20, replace = TRUE) # to samé, ale jako faktorová proměnná sample(factor(c("muž", "žena")), size = 20, replace = TRUE, prob = c(0.1, 0.9)) # snaha o modelování stavu na FF runif(n = 20, min = 1, max = 2) # 20 čísel rovnoměrného rozdělení mezi 1 až 2 (včetně) rnorm(n = 10) # 10 čísel standardního normálního rozdělení (střední hodnota = 0, směrodatná odchylka = 1) rnorm(n = 10, mean = 30, sd = 0.5) # 10 čísel normálního rozdělení set.seed(1) # nastavení "pevného počátku" náhodného generátoru - vhodné pro reprodukovatelné výsledky do publikace rnorm(n = 5) set.seed(1) rnorm(n = 5) # přestože jsou čísla "náhodná", jsou stejná, jako v předchozím případě (číslům říkáme pseudonáhodná) ## Histogramy, krabicové grafy, kvantily normalni <- rnorm(1000) # 1000 náhodných čísel se standardním normálním rozdělením hist(normalni) # histogram hist(normalni, breaks = 50) # počet hranic - je to jen doporučená hodnota, často si to udělá stejně po svém hist(normalni, freq = FALSE) # normování na relativní četnosti (obdoba hustoty pravděpodobnosti - plocha je 1) boxplot(normalni) # krabicový graf quantile(normalni, probs = c(0.25, 0.5, 0.75)) # kvantily dle přání: dolní kvartil, medián, horní kvartil median(normalni) # pro kontrolu medián quantile(normalni, probs = c(0.1, 0.9)) # rozpětí 10 % až 90 %, nebo-li interval 80 % hodnot # histogram pro faktorové proměnné kostka <- sample(1:6, size = 200, replace = TRUE) barplot(table(kostka)) barplot(table(kostka), xlab = "číslo", ylab = "četnost", main = "Hody kostkou") # včetně popisků ## Chybějící hodnoty NA značí chybějící hodnotu (měření se neprovedlo, nezdařilo, hodnota chybí) mean(c(1, 2, NA, 3)) # výstup NA mean(c(1, 2, NA, 3), na.rm = TRUE) # výstup 6 / 3 = 2 (správně) mean(c(1, 2, 0, 3)) # výstup 6 / 4 = 1.5 (špatně, pokud někdo myslel, že NA je 0) ## Výběr části vektoru, výběr na základě podmínky ranniTep <- c(65, 58, 72, NA, 66, 65, NA, 70) # NA je uvedeno u dnů, kdy se subjekt zapomněl změřit ranniTep[1:3] # první tři hodnoty mean(ranniTep[1:3]) which(ranniTep >= 70) # indexy hodnot splňujících podmínku ranniTep[which(ranniTep >= 70)] # hodnoty splňující podmínku K dispozici máme pro tyto podmínky následující operátory: menší <, větší >, menší nebo rovno <=, větší nebo rovno >=, je rovno ==, není rovno != a zároveň &, nebo | ranniTep[which(ranniTep >= 70 | ranniTep < 60)] # vypíše hodnoty, které jsou větší nebo rovno 70, nebo menší než 60 ranniTep[which(ranniTep > 60 & ranniTep < 70)] # hodnoty vyšší než 60 a zároveň nižší než 70 ## Tabulky - data.frame, vytváření, načítání a ukládání do souborů # Načtení obyčejného textového souboru, první řádek je hlavička tabulky (názvy sloupců) # hodnoty jsou odděleny mezerou - např. import tabulky z Praatu data <- read.table("soubor.txt", header = TRUE, sep = " ") data <- read.table("soubor.txt", header = TRUE, sep = " ", dec = ",") # Načtení dat z Excelu library(readxl) # pokud není knihovna nainstalována, tak nejdříve zavolat: install.packages("readxl") # prvotní instalace vyžaduje internet read_excel("soubor.xlsx", sheet = 1, col_names = TRUE) # tabulka s hlavičkou # lze i specifikovat přeskočení několika prvních řádků (parametr skip) # Vytvoření vlastního data.frame - slepením jednotlivých vektorů. mojeData <- data.frame(cisloID = 1:5, druhySloupec = c("muž", "žena", "muž", "muž", "žena")) # Uložení data.frame do souboru # Jednoduchý textový formát write.table(mojeData, "souborVystup.txt", sep = " ", row.names = FALSE) # jako oddělovač volím mezeru # Excel - co si budeme povídat, pro většinu lidí je to pořád ten nejdostupnější formát. library(openxlsx) # pokud není knihovna nainstalována, tak nejdříve zavolat: install.packages("openxlsx") write.xlsx(mojeData, "souborVystup.xlsx", sheetName = "První záložka", row.names = FALSE) # Základní operace s data.frame data <- InsectSprays head(data) # prvních 6 řádků data.frame tail(data) # posledních 6 řádků summary(data) # souhrnné statistiky pro každý sloupec (u numerických kvantily, u faktorových počty) str(data) # počet řádků, typy sloupců a ukázka prvních řádků nrow(data) # počet řádků dim(data) # počet řádků a sloupců names(data) # zjistit názvy sloupců names(data) <- c("count", "spray") # názvy sloupců si můžeme pojmenovat podle sebe # - užitečné, když tabulka nemá hlavičku data$count # odkaz na sloupec (vektor) dle názvu data$spray # napovídání: stačí napsat data$ a stisknout TAB mean(data$count) # výpočty se sloupcem data[, 1] # odkaz na sloupec podle indexu: všechny řádky, 1. sloupec # Pokud to však jde, je přehlednější odkazovat názvem. data[1:5, ] # výřez - prvních pět řádků, všechny sloupce data[1:5, 1] # prvních pět řádků, 1. sloupec data$count[1:5] # totéž, ale přehledněji: prvních 5 hodnot sloupce count hist(data$count) # histogram celého sloupce count # histogram hodnot count jen pro část dat, kde spray je A hist(subset(data, spray == "A")$count) # krabicový graf count rozdělený na skupiny dle faktoru spray boxplot(count ~ spray, data = data) # a hezké popisky boxplot(count ~ spray, data = data, xlab = "Typ postřiku", ylab = "Počet hmyzu", main = "Srovnání postřiků", col = "lightblue") # Délka zubů (len) ve skupinách podle proměnných (supp, dose) v data.frame (ToothGrowth) boxplot(len ~ supp*dose, ToothGrowth)