Vytvárame jednoduché numerické premenné a skúšame základné operácie:
a <- 42
b <- 7
a + b
## [1] 49
a * b
## [1] 294
a / b
## [1] 6
Vypočítajte obsah obdĺžnika so stranami x = 12.5 a y = 8.3. Výsledok uložte do premennej obsah.
x <- 12.5
y <- 8.3
obsah <- x * y
obsah
## [1] 103.75
Vytvoríme jednoduché logické porovnania:
p <- 15
q <- 20
p > q
## [1] FALSE
p <= q
## [1] TRUE
Overte, či je číslo r = 36 deliteľné číslom 6. Výsledok bude logická hodnota.
r <- 36
r %% 6 == 0
## [1] TRUE
Práca s textovými premennými:
meno <- "Martin"
priezvisko <- "Čásar"
cele_meno <- paste(meno, priezvisko)
cele_meno
## [1] "Martin Čásar"
Uložte do premennej svoj obľúbený citát a zistite, koľko znakov obsahuje.
citát <- "Nikdy sa nevzdávaj, aj malé kroky vedú k cieľu."
nchar(citát)
## [1] 47
Okrem funkcie paste() môžeme použiť aj balíček stringr, ktorý má užitočné funkcie pre prácu s textom. Príklad: kontrola, či text začína určitým slovom.
library(stringr)
slovo <- "Programovanie v R je zábavné"
str_starts(slovo, "Programovanie")
## [1] TRUE
str_ends(slovo, "ťažké")
## [1] FALSE
Alebo môžeme rozdeliť vetu na jednotlivé slová:
str_split(slovo, " ")
## [[1]]
## [1] "Programovanie" "v" "R" "je"
## [5] "zábavné"
# vektor inflácie za 8 štvrťrokov (syntetické dáta)
infl <- c(0.025, 0.028, 0.031, 0.037, 0.042, 0.039, 0.035, 0.033)
# vektor rastu HDP
gdp <- c(0.012, 0.016, 0.017, 0.019, 0.020, 0.018, 0.017, 0.016)
length(infl); length(gdp)
## [1] 8
## [1] 8
mean(infl); mean(gdp)
## [1] 0.03375
## [1] 0.016875
range(infl); range(gdp)
## [1] 0.025 0.042
## [1] 0.012 0.020
infl[1] # prvok 1
## [1] 0.025
infl[3:5] # rozsah
## [1] 0.031 0.037 0.042
infl[-1] # všetko okrem prvého
## [1] 0.028 0.031 0.037 0.042 0.039 0.035 0.033
infl[infl > 0.035] # filtrovanie podľa podmienky
## [1] 0.037 0.042 0.039
which.max(infl); infl[which.max(infl)]
## [1] 5
## [1] 0.042
Vypočítajte percentuálnu zmenu inflácie voči predošlému štvrťroku: (infl[t] - infl[t-1]) / infl[t-1].
Zistite, v koľkých štvrťrokoch bol reálny rast kladný.
real <- gdp-infl
pc_change_infl <- diff(infl) / infl[-length(infl)]
sum(real>0)
## [1] 0
pc_change_infl
## [1] 0.12000000 0.10714286 0.19354839 0.13513514 -0.07142857 -0.10256410
## [7] -0.05714286
#Užitočné generátory vektorov
qtrs <- paste0("Q", 1:8) # Q1..Q8
sekv <- seq(from = 10, to = 20, by = 2)
repn <- rep(100, times = 5)
qtrs; sekv; repn
## [1] "Q1" "Q2" "Q3" "Q4" "Q5" "Q6" "Q7" "Q8"
## [1] 10 12 14 16 18 20
## [1] 100 100 100 100 100
infl_named <- infl
names(infl_named) <- qtrs
infl_named
## Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
## 0.025 0.028 0.031 0.037 0.042 0.039 0.035 0.033
infl_named["Q4"]
## Q4
## 0.037
Vytvorte pomenovaný vektor gdp_named s menami Q1..Q8 a vypočítajte priemerný rast len pre Q5:Q8.
gdp_named <- gdp
names(gdp_named) <- qtrs
mean(gdp_named[c("Q5","Q6","Q7","Q8")])
## [1] 0.01775
M <- cbind(infl, gdp, real) # 8x3
dim(M); nrow(M); ncol(M)
## [1] 8 3
## [1] 8
## [1] 3
colnames(M) <- c("Inflacia","RastHDP","RealnyRast")
rownames(M) <- qtrs
M
## Inflacia RastHDP RealnyRast
## Q1 0.025 0.012 -0.013
## Q2 0.028 0.016 -0.012
## Q3 0.031 0.017 -0.014
## Q4 0.037 0.019 -0.018
## Q5 0.042 0.020 -0.022
## Q6 0.039 0.018 -0.021
## Q7 0.035 0.017 -0.018
## Q8 0.033 0.016 -0.017
M["Q4", ] # riadok Q4
## Inflacia RastHDP RealnyRast
## 0.037 0.019 -0.018
M[ , "Inflacia"] # stĺpec inflácie
## Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
## 0.025 0.028 0.031 0.037 0.042 0.039 0.035 0.033
rowMeans(M) # priemer cez stĺpce pre každý riadok
## Q1 Q2 Q3 Q4 Q5 Q6 Q7
## 0.00800000 0.01066667 0.01133333 0.01266667 0.01333333 0.01200000 0.01133333
## Q8
## 0.01066667
colMeans(M) # priemer cez riadky pre každý stĺpec
## Inflacia RastHDP RealnyRast
## 0.033750 0.016875 -0.016875
rowSums(M); colSums(M)
## Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
## 0.024 0.032 0.034 0.038 0.040 0.036 0.034 0.032
## Inflacia RastHDP RealnyRast
## 0.270 0.135 -0.135
Vytvorte podmaticu len zo stĺpcov Inflacia a RastHDP.
Vypočítajte priemer týchto dvoch ukazovateľov pre každý štvrťrok.
X <- M[, c("Inflacia","RastHDP")]
avg_two <- rowMeans(X)
head(avg_two)
## Q1 Q2 Q3 Q4 Q5 Q6
## 0.0185 0.0220 0.0240 0.0280 0.0310 0.0285