Toto je cvicenie zamerane na numericke, logicke, textove vektory a matice v base R.
# numericky vektor
ceny <- c(3.5, 4.2, 2.9, 5.0)
# textovy vektor
mena <- c("Anna", "Boris", "Cyril", "Dana")
# logicky vektor
akcia <- c(TRUE, FALSE, TRUE, TRUE)
ceny; mena; akcia
#> [1] 3.5 4.2 2.9 5.0
#> [1] "Anna" "Boris" "Cyril" "Dana"
#> [1] TRUE FALSE TRUE TRUE
length(ceny) # dlzka
#> [1] 4
sum(ceny) # sucet
#> [1] 15.6
mean(ceny) # priemer
#> [1] 3.9
min(ceny); max(ceny)
#> [1] 2.9
#> [1] 5
round(mean(ceny), 2)
#> [1] 3.9
# operacie po prvkoch
ceny + 1
#> [1] 4.5 5.2 3.9 6.0
ceny * 2
#> [1] 7.0 8.4 5.8 10.0
ceny^2
#> [1] 12.25 17.64 8.41 25.00
# vyber podla pozicie
ceny[1]
#> [1] 3.5
ceny[c(1, 3)]
#> [1] 3.5 2.9
# vsetko okrem 2. prvku
ceny[-2]
#> [1] 3.5 2.9 5.0
# vyber podla podmienky (logicka maska)
ceny[ceny > 3]
#> [1] 3.5 4.2 5.0
# nahradenie prvkov
ceny2 <- ceny
ceny2[ceny2 < 3] <- NA
ceny2
#> [1] 3.5 4.2 NA 5.0
which(ceny > 3) # indexy TRUE
#> [1] 1 2 4
any(ceny > 10) # aspon jeden?
#> [1] FALSE
all(ceny > 1) # vsetky?
#> [1] TRUE
unique(mena) # jedinecne prvky
#> [1] "Anna" "Boris" "Cyril" "Dana"
slova <- c("R", "je", "fajn")
paste(slova, collapse = " ")
#> [1] "R je fajn"
paste("Cena:", ceny) # spojenie textu a cisel
#> [1] "Cena: 3.5" "Cena: 4.2" "Cena: 2.9" "Cena: 5"
sprintf("%s ma cenu %.2f EUR", mena, ceny)
#> [1] "Anna ma cenu 3.50 EUR" "Boris ma cenu 4.20 EUR" "Cyril ma cenu 2.90 EUR"
#> [4] "Dana ma cenu 5.00 EUR"
x <- c(1, NA, 3, 0)
# pozor na NA pri porovnaniach
is.na(x)
#> [1] FALSE TRUE FALSE FALSE
# bezpecny priemer
mean(x, na.rm = TRUE)
#> [1] 1.333333
# filtrovanie bez NA a > 1
x[!is.na(x) & x > 1]
#> [1] 3
M <- matrix(1:12, nrow = 3, ncol = 4) # plni sa po stlpcoch
M
#> [,1] [,2] [,3] [,4]
#> [1,] 1 4 7 10
#> [2,] 2 5 8 11
#> [3,] 3 6 9 12
nrow(M); ncol(M); dim(M)
#> [1] 3
#> [1] 4
#> [1] 3 4
dimnames(M) <- list(
riadok = paste0("r", 1:nrow(M)),
stlpec = paste0("c", 1:ncol(M))
)
M
#> stlpec
#> riadok c1 c2 c3 c4
#> r1 1 4 7 10
#> r2 2 5 8 11
#> r3 3 6 9 12
M[1, 2] # prvok (r1, c2)
#> [1] 4
M[, 3] # treti stlpec
#> r1 r2 r3
#> 7 8 9
M[2, ] # druhy riadok
#> c1 c2 c3 c4
#> 2 5 8 11
M[, 2, drop = FALSE] # ostane matica (n x 1)
#> stlpec
#> riadok c2
#> r1 4
#> r2 5
#> r3 6
A <- matrix(1:4, 2, 2)
B <- matrix(c(2, 0, 1, 3), 2, 2)
A + B # scitanie po prvkoch
#> [,1] [,2]
#> [1,] 3 4
#> [2,] 2 7
A * B # nasobenie po prvkoch (Hadamard)
#> [,1] [,2]
#> [1,] 2 3
#> [2,] 0 12
A %*% B # maticovy sucin
#> [,1] [,2]
#> [1,] 2 10
#> [2,] 4 14
# transpozicia a diagonalne prvky
t(A)
#> [,1] [,2]
#> [1,] 1 2
#> [2,] 3 4
diag(A)
#> [1] 1 4
X <- matrix(c(10, 12, 14,
9, 11, 16,
7, 13, 15,
8, 10, 12), nrow = 4, byrow = TRUE)
colnames(X) <- c("Mat", "Fy", "Bio")
rownames(X) <- paste0("st", 1:4)
X
#> Mat Fy Bio
#> st1 10 12 14
#> st2 9 11 16
#> st3 7 13 15
#> st4 8 10 12
rowMeans(X) # priemer studenta
#> st1 st2 st3 st4
#> 12.00000 12.00000 11.66667 10.00000
colSums(X) # sucet predmetu
#> Mat Fy Bio
#> 34 46 57
Zadanie: Vytvorte vektor t pre 7 dni.
Spocitajte priemer, kolko dni je nad priemerom a vektor hodnot >
20.
# Vase riesenie sem:
# t <- c(...)
# priem <- mean(t)
# kolko_nad <- sum(t > priem)
# nad20 <- t[t > 20]
#> $priem
#> [1] 20.42857
#>
#> $kolko_nad
#> [1] 3
#>
#> $nad20
#> [1] 21 23 25
Zadanie: ceny2 <- c(12, 8, 15, 6).
Zlacnite hodnoty >= 10 o 20%, ostatne nechajte.
# Vase riesenie sem:
# ceny2 <- c(12, 8, 15, 6)
# po_zlave <- ceny2
# po_zlave[ceny2 >= 10] <- ceny2[ceny2 >= 10] * 0.8
#> [1] 9.6 8.0 12.0 6.0
Zadanie: V X najdite (a) studenta s
najvyssim priemerom, (b) predmet s najvyssim suctom.
# Vase riesenie sem:
# priem_stud <- rowMeans(X)
# max_stud <- names(which.max(priem_stud))
# sucet_pred <- colSums(X)
# max_pred <- names(which.max(sucet_pred))
#> $naj_student
#> [1] "st1"
#>
#> $naj_predmet
#> [1] "Bio"
Zadanie: V matici Y oznacte, ktore
riadky neobsahuju ziadnu nulu.
# Vase riesenie sem:
# Y <- matrix(c(1,0,3,
# 2,5,6,
# 0,0,1,
# 7,8,9), nrow = 4, byrow = TRUE)
# bez_nuly <- apply(Y, 1, function(r) all(r != 0))
#> $riadok_bez_nuly
#> [1] FALSE TRUE FALSE TRUE