9  Matrisler

Hatırlarsanız vektörler (Bölüm 8), sadece tek bir veri tipini içeren bir boyutlu veri yapılarıydı.

Ancak gerçek veri analizi işlemlerinde iki boyutlu veri yapılarına ihtiyacımız olabilir. Mesela verimiz satır ve sütünlardan oluşabilir.

Bu durumda matris veri yapılarını kullanıyoruz. Matrisler de aynı vektörler gibi tek bir veri tipini kapsayabilir. Aşağıda örnek bir matris görebilirsiniz (Tablo 9.1).

Tablo 9.1
head(state.x77)
           Population Income Illiteracy Life Exp Murder HS Grad Frost   Area
Alabama          3615   3624        2.1    69.05   15.1    41.3    20  50708
Alaska            365   6315        1.5    69.31   11.3    66.7   152 566432
Arizona          2212   4530        1.8    70.55    7.8    58.1    15 113417
Arkansas         2110   3378        1.9    70.66   10.1    39.9    65  51945
California      21198   5114        1.1    71.71   10.3    62.6    20 156361
Colorado         2541   4884        0.7    72.06    6.8    63.9   166 103766

Bir önceki derste kullandığımız yaprak_uzunlugu isimli vektörden bir matris oluşturalım.

yaprak_uzunlugu <- c(2.3, 3.4, 4.5, 1.2, 3.4, 
                    3, 1.8, 6.3, 2.1, 5)

Bu vektörden bir matris oluşturmak istersek öncelikle matrix() fonksiyonunu kullanarak, satır (nrow) ve sütun (ncol) sayılarını belirlememiz gereklidir.

matrix(yaprak_uzunlugu, nrow=5, ncol=2)
     [,1] [,2]
[1,]  2.3  3.0
[2,]  3.4  1.8
[3,]  4.5  6.3
[4,]  1.2  2.1
[5,]  3.4  5.0

Evet, sonuç olarak 5 satır ve iki sütundan oluşan ilk matrisinizi oluşturdunuz.

Satır ve Sütun sayılarına dikkat!

Satır ve sütun sayılarının çarpımı, vektörün uzunluğunu vermeli. Yani 10 tane elemana sahip bir vektörden, 2x5 ya da 5x2 boyutlarında matrisler elde edebilirsiniz.

9.1 Matris boyutları

Matris boyutlarını öğrenmek için üç farklı fonksiyon kullanabilirsiniz:

  • dim bir matrisin satır ve sütun sayılarını geri döndürür.
  • nrow sadece satır sayısını geri döndürür.
  • ncol sadece sütun sayısını geri döndürür.

Şu şekilde:

ornek_matris <- matrix(yaprak_uzunlugu, nrow=5, ncol=2)

dim(ornek_matris)
[1] 5 2
nrow(ornek_matris)
[1] 5
ncol(ornek_matris)
[1] 2

9.2 Satır ve Sütün isimleri

İstersek matrislerimize satır ve sütun isimleri atayabiliriz. Buradaki örnek oldukça rastgele oldu ancak konunun anlaşılması için önemli.

Bunun için ise iki farklı fonksiyon daha kullanıyoruz:

  • rownames
  • colnames
rownames(ornek_matris) <- c("Satir1", "Satir2", "Satir3", "Satir4", "Satir5")

colnames(ornek_matris) <- c("Sutun1", "Sutun2")

ornek_matris
       Sutun1 Sutun2
Satir1    2.3    3.0
Satir2    3.4    1.8
Satir3    4.5    6.3
Satir4    1.2    2.1
Satir5    3.4    5.0

9.3 Matrislerle çalışmak

Matrisler’de de indis kullanabiliriz. Bu sayede matris içerisindeki elemanlara erişebiliriz. Ancak burada iki tane eleman kullanmamız gerekecek. Bir tanesi satır için, diğeri ise sütun için.

Mesela, örnek matirisimizde 4. satır 2. sütundaki elemana erişmek isteyelim:

ornek_matris[4,2]
[1] 2.1

Birinci eleman satır sayısını, ikinci eleman ise sütun sayısını ifade etmektedir.

Sadece ikinci sütunda bulunan, 2 ve 4 arasındaki satırlara erişmek istersek:

ornek_matris[2:4,2]
Satir2 Satir3 Satir4 
   1.8    6.3    2.1 

Dikkat ederseniz bu örnekte 2:4 yapısını kullandık. Bu bize 2, 3, 4 vektörünü geri döndürecektir. Sütun için ise sadece 2 kullandık.

Sadece 4. satırı geri döndürmek için:

ornek_matris[4,]
Sutun1 Sutun2 
   1.2    2.1 

Sütun indisini kullanmazsak, bütün sütun elementlerini geri döndürür.

Sadece birinci sütunu geri döndürmek için ise:

ornek_matris[,1]
Satir1 Satir2 Satir3 Satir4 Satir5 
   2.3    3.4    4.5    1.2    3.4 

9.4 Matrislerde mantıksal işlemler

Vektörlerde yaptığımız mantıksal işlemleri matrislerde de yapabiliriz.

Mesela ikinci sütunda, 5’den büyük satırları geri döndürelim:

ornek_matris[,2] > 5
Satir1 Satir2 Satir3 Satir4 Satir5 
 FALSE  FALSE   TRUE  FALSE  FALSE 

Dikkat ederseniz 5’den büyük olan değerleri bize TRUE olarak gösterdi. Bu mantıksal vektörü tekrar bir indis olarak verelim:

ornek_matris[ornek_matris[,2] > 5, 1]
[1] 4.5

Dikkat edin mantıksal vektörü sadece satır indisi olarak kullandık! Yoksa hata alırız.

Ya da bütün matris içerisinde bir karşılaştırma yapabiliriz. Bütün matris içinde 3’den büyük olan değerleri geri döndürelim:

ornek_matris > 3
       Sutun1 Sutun2
Satir1  FALSE  FALSE
Satir2   TRUE  FALSE
Satir3   TRUE   TRUE
Satir4  FALSE  FALSE
Satir5   TRUE   TRUE

Bunu tekrar bir indis olarak geri kullanalım:

ornek_matris[ornek_matris > 3]
[1] 3.4 4.5 3.4 6.3 5.0

Gördüğünüz gibi bize bir vektör geri döndürdü. Çünkü tek indis kullandık. Bu özellik matrislere özgüdür.