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 |