# DOMACI UKOL 3 # A) Vytvořte matici MAT s rozměry 7 × 3, tak: # Aby první řádek obsahoval posloupnost: -2, 2, 6, 10,… # Druhý řádek tvořily hodnoty 13 a # Třetí řádek měl minimální hodnotu – 3 a maximální 3 # B) vypište sedmý sloupec matice MAT jako: # i) řádkový vektor a # ii) jako sloupcový vektor # C) využitím funkce cbind, vytvořte matici B tak, aby výsledek vypadal následujícím způsobem: # [,1] [,2] [,3] [,4] # [1,] -0.10000000 0.01111111 NA NA # [2,] -0.07777778 0.03333333 NA NA # [3,] -0.05555556 0.05555556 NA NA # [4,] -0.03333333 0.07777778 NA NA # [5,] -0.01111111 0.10000000 NA NA MAT <- matrix(c(seq(from=-2, by=4, length=7), rep(13, 7), seq(from=-3, to=3, length=7)), nrow=3, byrow=T); MAT MAT[,7] MAT[,7, drop=FALSE] B1 <- matrix(c(seq(from = - 0.1, to = 0.1, length = 10)), nrow=5); B1 B2 <- matrix(NA, nrow=5, ncol=2); B2 cbind(B1,B2) ############# SEZNAM ################################################ Doctor <- list(name = c("William Hartnell","Patrick Troughton","Jon Pertwee","Tom Baker","Peter Davison","Colin Baker","Sylvester McCoy","Paul McGann", "John Hurt","Christopher Eccleston"), year=c("55","45","50","40","29","40","44","36","73","41"), episodes=c("134","119","128","172","69","31","42","1","2","13")); Doctor Doctor <- list(name = c(Doctor$name,"David Tennat","Matt Smith","Peter Capaldi"), year = c(Doctor$year,"34","27","55"), episodes = c(Doctor$episodes,"47","44","26")); Doctor ############# DATOVÁ TABULKA ######################################## vek <- c(27,35,30,47,42);vek sex <- c("female","male","male","female","female"); sex strana <-c("sin","sin","dx","dx","dx"); strana ID <- c("SC_001", "SC_007", "SC_013", "SC_014", "SC_020"); ID VZOREK <- data.frame(vek, strana, sex, row.names = ID); VZOREK vzorek <- data.frame(vek, strana, sex, ID); vzorek ## Vyber z data.frame (indexovani) VZOREK$vek VZOREK$strana VZOREK$sex VZOREK[,2:3] VZOREK[2:5,] VZOREK[sex=="male",] vzorek[sex=="male",] VZOREK[sex=="male" & strana=="sin",] VZOREK[c("SC_001","SC_013"),] VZOREK[vek>30,] VZOREK[order(VZOREK$vek),] VZOREK[order(VZOREK$sex, VZOREK$vek),] vzorek vyzkum <- c("A22","A22","A02","A02","A02") ID <- c("SC_001", "SC_007", "SC_013", "SC_014", "SC_020") strana <-c("sin","sin","dx","dx","dx") rok_vyzkumu <- data.frame(ID, strana, vyzkum); rok_vyzkumu merge(vzorek, rok_vyzkumu, by = "ID") # Otázka: co se stane, když je ve spojovaných tabulkách více sloupců se shodným názvem? merge(vzorek, rok_vyzkumu) subset(VZOREK,VZOREK$vek>=35)[,c("strana","sex")] subset(VZOREK,VZOREK$vek>=35) VZOREK$vyska <- c(155,170,187,165,195) VZOREK$mereni <- NA # pridani prazdneho sloupce VZOREK VZOREK$mereni <- NULL # odstraneni sloupce VZOREK ############# CHYBEJICI A NEEXISTUJICI HODNOTY ##################### 0/0 mean(0/0) # NaN 1/0 + 1/0 -1/0 + (-1/0) sum(5*(1/0 + 1/0)) # Inf 100+NULL # numeric(0) mean(100*NULL) # NaN sum(100*NULL) # 0 5*mean(100*NULL) # NaN mean(5,7,8,9,4,3,NA)# 5 sum(5,7,8,9,4,3,NA) # NA ############# ULOZENI OBJEKTU ##################################### sink("vysledky.txt") vek <- c(27,35,30,47,42);vek sex <- c("female","male","male","female","female"); sex strana <-c("sin","sin","dx","dx","dx"); strana ID <- c("SC_001", "SC_007", "SC_013", "SC_014", "SC_020"); ID VZOREK <- data.frame(vek, strana, sex, row.names = ID); VZOREK sink() write.table(VZOREK, "tabulka.csv", sep=";") # note report # DOMACI UKOL 4 # A) Dle tabulky 1 vytvořte data.frame s názvem Soubor. # Snažte se údaje „slepě“ nevypisovat, ale použijte funkce z kapitoly Vektory. # B) Seřaďte objekt Soubor podle proměnné strana a vytvořte dva samostatné objekty: # prava obsahující pouze hodnoty pravé strany (dx) # leva obsahující hodnoty pouze levé strany (sin) # C) Objekty prava, leva spojte dohromady podle proměnné ID a proměnné sex do objektu Soubor_S. ############# NACTENI OBJEKTU ###################################### DATA <- read.csv("dataP.csv", sep=";", header = TRUE) attach(DATA) head(DATA) dim(DATA) DATA[1,] dimnames(DATA) names(DATA) colnames(DATA) str(DATA) # v ramci promenych sex, side a age jsou neocekavane hodnoty => zkontrolujeme levels(DATA$Sex) # navic oznaceni muz a zena, sjednotime summary(DATA$Sex) levels(DATA$Sex)[levels(DATA$Sex)=="zena"] <- "female" levels(DATA$Sex)[levels(DATA$Sex)=="muz"] <- "male" levels(DATA$Sex) levels(DATA$Side) levels(DATA$Side)[levels(DATA$Side)=="dy"] <- "dx" levels(DATA$Side)[levels(DATA$Side)=="si"] <- "sin" levels(DATA$Side)[levels(DATA$Side)=="sni"] <- "sin" levels(DATA$Side) levels(DATA$Age) levels(DATA$Age)[levels(DATA$Age)=="old"] <- NA levels(DATA$Age) DATA$Age <- as.numeric(DATA$Age) DATA$Age is(DATA$Age) write.table(DATA, "data_opr.csv", sep=";") # ulozeni tabulky s opravenymi daty # je mozne nyni ulozenou tabulku nacist a pracovat s ni, nebo dale pracovat s objektem DATA DATA <- read.csv("data_opr.csv", sep=";", header = TRUE) attach(DATA) head(DATA) dim(DATA) dimnames(DATA) names(DATA) str(DATA) summary(DATA) summary(DATA$Age) summary(DATA[,7]) # install.packages("pastecs") # install.packages("boot") library(boot) library(pastecs) # popisne statistiky za vyuziti pastecs stat.desc(DATA[Sex=="female","Length_cl"]) stat.desc(DATA[Sex=="male","Length_cl"]) # Totéž, ale bez hodnot NA stat.desc(na.omit(DATA[Sex=="female","Length_cl"])) stat.desc(na.omit(DATA[Sex=="male","Length_cl"])) A1 <- stat.desc(DATA[Sex=="female","Length_cl"]) # vcetne NA B1 <- stat.desc(DATA[Sex=="male","Length_cl"]) A2 <- stat.desc(na.omit(DATA[Sex=="female","Length_cl"])) # bez NA B2 <- stat.desc(na.omit(DATA[Sex=="male","Length_cl"])) A1["median"] A2["median",] A1 A1 == A2 # vidime, ze se vektory nerovnaji pouze v promene nbr.na is(A1) is(A2) # Note: v momente kdy nejsou pritomny NA honoty se "vysledek" funkce stat.desc() # ulozi jako data.frame library(psych) describeBy(DATA[,"Length_cl"], group=DATA[,"Sex"]) describeBy(DATA[,"Length_cl"], group=DATA[,c("Sex","Side")]) A3 <- describeBy(DATA[,"Length_cl"], group=DATA[,"Sex"]) B3 <- describeBy(DATA[,"Length_cl"], group=DATA[,c("Sex","Side")]) typeof(A3) typeof(B3) # Note: vysledek funkce describeBy je list (pozor na odkazovani na hodnoty) A3["male"] A3[["male"]] A3[["male"]][2] B3[[4]] # note: jednotlive polozky nenesou nazev - viz nahled v global environment B3[[2]]["mean"] length(names(DATA)) DATA$Inner_End_W <- NULL # vymazani promenne (sloupce), kontrola pomoci length length(names(DATA)) DATA$new <- NA length(names(DATA)) # pridani promenne (sloupce), kontrola pomoci length # DOMACI UKOL 5 # A) Z ISu si stáhněte data: du_5.txt a načtěte je do RStudia (jméno proměnné zvolte libovolně). # B) Zkontrolujte načtená data, případné chyby opravte. # Při opravách chyb vycházejte z předpokladu, že hodnota s vyšším zastoupením je ta správná. # C) Zjistěte dimenze načteného objektu a vypočítejte základní statistiky jednotlivých proměnných # D) Vymažte prázdné sloupce (19 až 31). # E) Vytvořte dva objekty DX a SIN: # DX bude obsahovat pouze měření z pravé strany (Side bude dx) # SIN bude obsahovat pouze měření z levé strany (Side bude sin) # A spojte je dohromady do objektu DXSIN (note: funkce merge). # F) Vypočítejte základní statistiky pro muže a ženy k rozměrům F1.x, F1.y.