2. Matrice¶
Matrica je kolekcija elemenata istoga tipa uređenih u fiksan broj redaka i stupaca.
Funkcija matrice u programskom jeziku R izgleda ovako matrix(elementi, ostali argumenti)
Prvi argument funkcije matrix()
su elementi koji čine matricu. Na primjer brojevi od 1 do 9.
Ostali argumenti mogu biti nrow=x
ili ncol=y
gdje x i y predstavljaju broj redaka odnosno stupaca u matrici.
Argument byrow=T/F
određuje da li je redoslijed elemenata složen po retcima (byrow=FALSE
je pretpostavljena vrijednost i ne mora se pisati)
matrix(1:12, byrow=F, ncol=3)
1 | 5 | 9 |
2 | 6 | 10 |
3 | 7 | 11 |
4 | 8 | 12 |
Matricu možemo složiti i od nekoliko vektora.
U slijedećem primjeru matricu moja_matrica
smo napravili od tri vektora redak1
, redak2
i redak3
Ako bolje pogledate vidjeti ćete da je matrica zapravo vektor napravljen od vektora.
redak1<-c(1, 2, 3)
redak2<-c(4, 5, 6)
redak3<-c(7, 8, 9)
moja_matrica<-matrix(c(redak1, redak2, redak3), ncol=3, byrow=T)
moja_matrica
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
Primjer
Napravimo matricu u kojoj ćemo imati temperature zraka ujutro, u podne i uvečer.
Mjerili smo četiri dana u tjednu i rezultate pohranili u četiri vektora:
pon <- c(6, 15, 19)
uto <- c(0, 6, 7)
sri <- c(-1, 4, 4)
cet <- c(-1, 2, 1)
Sada ćemo kreirati matricu od ta četiri vektora...
temperature_mat <- matrix(c(pon, uto, sri, cet), nrow=4, byrow=TRUE)
temperature_mat
6 | 15 | 19 |
0 | 6 | 7 |
-1 | 4 | 4 |
-1 | 2 | 1 |
Imenovanje redaka i stupaca¶
Dakle, ako ispišemo našu matricu dobiti ćemo:
temperature_mat
6 | 15 | 19 |
0 | 6 | 7 |
-1 | 4 | 4 |
-1 | 2 | 1 |
Ova matrica izgleda malo dosadno, suhoparno...
Kako da joj nešto nedostaje...
...možda kada bi imala imena redaka i stupaca?
...probajmo
Kreirati ćemo dva vektora:
imena_stupaca <- c('ujutro', 'podne', 'uvecer')
imena_redaka <- c('pon', 'uto', 'sri', 'cet')
I onda ih proglasiti imenima stupaca i redaka funkcijama rownames
i colnames
#rownames(temperature_mat) <- c('p','u','s','c')
rownames(temperature_mat) <- imena_redaka
colnames(temperature_mat) <- imena_stupaca
temperature_mat
ujutro | podne | uvecer | |
---|---|---|---|
pon | 6 | 15 | 19 |
uto | 0 | 6 | 7 |
sri | -1 | 4 | 4 |
cet | -1 | 2 | 1 |
Sada je puno bolje...
Zbrajanje redaka i stupaca¶
Redke i stupce naše matrice možemo zbrajati.
Za to koristimo funkcije rowSums()
i colSums()
Zadatak
Napravite matricu parni_mat
koja sadrži sve parne brojeve od 2 do 18 u matrici veličine 3 x 3
Zatim ispišite sume njezinih redaka i stupaca.
# vektor može biti c(2, 4, 6, 8, 10, 12, 14, 16, 18) ili seq(2,18,2) ili c(1:9)*2
parni_mat <- matrix(c(1:9)*2, byrow=T, ncol=3)
parni_mat
rowSums(parni_mat)
colSums(parni_mat)
2 | 4 | 6 |
8 | 10 | 12 |
14 | 16 | 18 |
- 12
- 30
- 48
- 24
- 30
- 36
Spajanje matrica¶
Više matrica možemo spojiti u jednu funkcijom cbind()
ili rbind()
Pogađate cbind spaja po stupcima, a rbind spaja po redcima.
Imajte u vidu da vektor možemo smatrati kao matricu sa jednim retkom (stupcem).
Dodajmo našoj matrici temperature_mat
vektor sa mjerenjima od petka...
pet<-c(4, 12, 18)
rbind(temperature_mat, pet)
ujutro | podne | uvecer | |
---|---|---|---|
pon | 6 | 15 | 19 |
uto | 0 | 6 | 7 |
sri | -1 | 4 | 4 |
cet | -1 | 2 | 1 |
pet | 4 | 12 | 18 |
Zadatak
Kreirajte vektor pet
sa vrijednostima 4, 12 i 18 i dodajte ga našoj matrici temperature_mat
Kreirajte vektor sub
sa vrijednostima 2, 4 i 6 i dodajte ga našoj matrici temperature_mat
Kreirajte vektor ned
sa vrijednostima 1, 2 i 3 i dodajte ga našoj matrici temperature_mat
Kreirajte vektor noc
sa sa svim vrijednostima jednakim 0 i dodajte ga kao četvrti stupac u našu matricu.
Rješenje
pet <- c(4, 12, 18)
sub <- c(2, 4, 6)
ned <- c(1, 2, 3)
temperature_mat <- rbind(temperature_mat, pet, sub, ned)
noc <- c(0,0,0,0,0,0,0)
temperature_mat <- cbind(temperature_mat, noc)
temperature_mat
ujutro | podne | uvecer | noc | |
---|---|---|---|---|
pon | 6 | 15 | 19 | 0 |
uto | 0 | 6 | 7 | 0 |
sri | -1 | 4 | 4 | 0 |
cet | -1 | 2 | 1 | 0 |
pet | 4 | 12 | 18 | 0 |
sub | 2 | 4 | 6 | 0 |
ned | 1 | 2 | 3 | 0 |
Prosjek¶
Znamo još od ranije da se prosjek računa funkcijom mean()
Za početak ispišite stupac podne
iz naše matrice.
# temperature_mat[,2]
temperature_mat[,'podne']
- pon
- 15
- uto
- 6
- sri
- 4
- cet
- 2
- pet
- 12
- sub
- 4
- ned
- 2
A zatim izračunajte prosječnu temperaturu u podne...
mean(temperature_mat[,2])
Zadatak
Ispišite vrijednosti temperatura za vikend.
Kolika je prosječna jutarnja temperatura radnim danom?
temperature_mat[6:7,]
mean(temperature_mat[1:5, 1])
ujutro | podne | uvecer | noc | |
---|---|---|---|---|
sub | 2 | 4 | 6 | 0 |
ned | 1 | 2 | 3 | 0 |