1 Procvičování 3 s řešením Vektory 1. V RStudiu vytvořte nový projekt, umístěte ho do adresáře cv03. 2. Do adresáře cv03 si ze studijních materiálů stáhněte pracovní prostředí cv03.RData a načtěte ho do R pomocí příkazu load(). Pracovní prostředí obsahuje vektor výska s výškami [cm] jedinců v náhodném vzorku naší Rkové populace jejich jména jména a délky nohou noha. load(url("http://www.sci.muni.cz/~syrovat/cv03.RData")) ls() ## [1] "jména" "noha" "vyska" 3. Vytvořte vektor pomer obsahující podíly délky nohou (noha) ku výšce těla (vyska). pomer <- noha/vyska pomer ## [1] 0.1482 0.1543 0.1514 0.1466 0.1503 0.1650 0.1445 0.1551 0.1590 NA 4. Vytvořte textový vektor sex odlišující pohlaví měřených jedinců (m/z). (Pohlaví odvoďte ze jmen jedinců). sex <- c("z", "z", "m", "z", "m", "m", "z", "m", "m", "z") sex ## [1] "z" "z" "m" "z" "m" "m" "z" "m" "m" "z" 5. Vytvořte vektor jedniček (1) a dvojek (2) barva, v němž jedničky budou odpovídat pohlaví 'm' a dvojky pohlaví 'z'. Nikoliv však manuálně, ale pomocí logického výrazu. barva <- (sex == "z") + 1 barva ## [1] 2212112112 Logické výrazy 6. Zjistěte, kolik jedinců má nadprůměrnou výšku. prum.vyska <- mean(vyska, na.rm = T) sum(vyska > prum.vyska, na.rm = T) ## [1] 4 7. Zjistěte, kolik jedinců má podprůměrnou nohu. 2 prum.noha <- mean(noha, na.rm = T) sum(noha < prum.noha, na.rm = T) ## [1] 4 8. Zjistěte, kolik žen a kolik mužů obsahuje náš dataset. # zeny sum(sex == "z") ## [1] 5 # muzi sum(sex == "m") ## [1] 5 # funkce table() zjisti počet výskytu jedinečných hodnot v objektu: table(sex) ## sex ## m z ##5 5 9. Zjistěte, kolik mužů má nadprůměrnou nohu a kolik žen má podprůměrnou nohu. # muzi sum(sex == "m" & noha > prum.noha, na.rm = T) ## [1] 5 # zeny sum(sex == "z" & noha < prum.noha, na.rm = T) ## [1] 4 10. Zjistěte, kolik mužů a kolik žen je aspoň v něčem naprůměrných. # muzi sum(sex == "m" & (vyska > prum.vyska | noha > prum.noha), na.rm = T) ## [1] 5 # zeny sum(sex == "z" & (vyska > prum.vyska | noha > prum.noha), na.rm = T) ## [1] 0 3 11. Zobrazte bodový graf plot() závislosti délky noha (osa y) na výšce (osa x). V grafu odlište muže a ženy barvou col= a tvarem pch= symbolů pomocí vektoru barva. (Pro definovaní barev existuje několik možností, jednou z nich je pouhé číslo odkazující na pořadí barvy v barevné paletě paletteO). A právě jednička a dvojka odkazují na černou a červenou barvu (při defaultním nastavení palety). Symboly se specifikují primárně čísly. palette("default") # abych mel stejnou (default) paletu jako ostatni par(mar = c(4, 4, 1, 0.1)) # aby obrázek nemel velké okraje plot(noha ~ vyska, col = barva, pch = barva) O O O A A A A -1-1-1-1-1-1-1- 165 170 175 180 185 190 195 vyska 12. Zobrazte krabicový graf boxplotO závislosti poměru pomer na pohlavi sex. Použijte tvar formula, tedy pomer ~ sex. par(mar = c(4, 4, 1, 0.1)) # aby obrázek nemel velké okraje boxplot(noha ~ sex) 00 C\l iz o «= CD C\J C\J 00 C\l CD C\J ^1- C\J Podvýběry - subscripty 13. Zjistěte 5. hodnotu vektoru vyska. vyska[5] ## [1] 197 14. Zjistěte 8., 2., a 5. hodnotu vektoru vyska. vyska[c(8, 2, 5)] ## [1] 187 162 197 15. Zjistěte 1., 2., 1., 2., 1. a 1. hodnotu vektoru noha. vyska[c(l, 2, 1, 2, 1, 1)] ## [1] 164 162 164 162 164 164 16. Nechejte si vypsat vektor jména v náhodném poradi. jména[sample(1:length(jména))] ## [1] "Jan" ## [7] "Jiri" sample(jména) ## [1] "Zuzka" ## [7] "Ondra" "Jaroslav" "Ondra" "Jakub" "Ľubica" "Zuzka" "Petra" "Jakub" "Michaela" "Petra" "Jiri" "Tereza" "Jan" "Michaela" "Tereza" "Jaroslav" "Lubica" 5 17. Nechejte si vypsat vektor výšek, v němž bude chybět 6. a 7. hodnota. vyska[-(6:7)] ## [1] 164 162 183 174 197 187 173 NA 18. Zjistěte jméno/a jedince/ů, jehož/jejichž výskaje neznámá. Použijte is.na(). jmena[is.na(vyska)] ## [1] "Zuzka" 19. Zjistěte, kdo je nejnižší. jmena[vyska == min(vyska, na.rm = T)] ## [1] "Petra" NA 20. Zjistěte pohlaví nej nohatějšího jedince. sex[noha == max(noha, na.rm = T)] ## [1] "m" NA 21. Vypište jména všech mužů. jmena[sex == "m"] ## [1] "Jaroslav" "Ondra" "Jan" "Jiri" "Jakub" 22. Zjistěte průměrnou délku nohy zvlášť mužů a žen. # muzi mean(noha[sex == "m"], na.rm = T) ## [1] 28.7 # zeny mean(noha[sex == "z"], na.rm = T) ## [1] 24.62 23. Zjistěte, která žena je nejvyšší. 6 # tady je vic možnosti, muzeme si pomoct vytazenim zen: vyska.z <- vyska[sex == "z"] jména.z <- jmena[sex == "z"] jmena.z[vyska.z == max(vyska.z, na.rm = T)] ## [1] "Tereza" NA # nebo použit složité jsi logicky vyraz: jmena[sex == "z" & vyska == max(vyska[sex == "z"], na.rm = T)] ## [1] "Tereza" NA # nebo treba použit postupne 2 výbery za sebou: jmena[sex == "z"][vyska[sex == "z"] == max(vyska[sex == "z"], na.rm = T)] ## [1] "Tereza" NA 24. Zjistěte, zda je nejmenší mužská noha větší než největší ženská noha. min(noha[sex == "m"], na.rm = T) > max(noha[sex == "z"], na.rm = T) ## [1] TRUE 25. Pojmenujte vektor vyska jmény jedinců, stejně tak vektor noha a sex. Použijte names(). names(vyska) <- jména names(noha) <- jména names(sex) <- jména 26. Zjistěte délku nohy Ondry. vyska["Ondra"] ## Ondra ## 197 27. Zjistěte výšku Lubice, Jaroslava a Terezy. vyska[c("Lubica", "Jaroslav", "Tereza")] ## Ľubica Jaroslav Tereza ## 164 183 174 28. Zjistěte, zda noha Jakuba je větší než noha Michaely. 7 noha["Jakub"] > noha["Michaela"] ## Jakub ## TRUE 29. Doplňte neznámou hodnotu výšky a velikosti nohy Zuzky. vyska["Zuzka"] <- 161 noha["Zuzka"] <- 24.3 30. Vraťte se k bodům 5. a 9. a vytvořte vektor libovolných předdefinovaných barev barvaž, které budou odlišovat mezi muži a ženami našich jedinců. Barvy vyberte ze seznamu coloursO a pro vytvoření vektoru použijte vektor barva jako subscript. barva2 <- c("slatebluel", "honeydew4")[barva] 31. Obdobně vytvořte vektor puntík, který bude rovněž rozlišovat mezi muži a ženami a bude obsahovat kódové označení dvou vybraných symbolů (dvě číselné hodnoty mezi 1 a 25). puntík <- c(15, 1)[barva] 32. Následně překreslete obrázek bodu 11., pro definici barvy použijte vektor barvaž a pro defnici symbolu puntík. par(mar = c(4, 4, 1, 0.1)) plot(noha ~ vyska, col = barva2, pch = puntík) 00 C\l iz o «= CD C\J ^1- C\J 160 170 180 190 vyska Logické operátory: > větší < menší == roven <= menší nebo rovno >= větší nebo rovno ! opak != není rovno & a 1 nebo