R Matrisler

Dr. Kubra Atalay Kabasakal

Kasım 2021

Matrisler

rbind()

boy <- c(160,165,170,155,167,162,169,158,160,164)
kilo <- c(55,55,57,50,48,65,58,62,45,47)

rmatris <- rbind(boy,kilo) 
dim(rmatris) # 2 x 10 
## [1]  2 10
rmatris # kosegen parantez [satir numarasi, sutun numarasi]
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## boy   160  165  170  155  167  162  169  158  160   164
## kilo   55   55   57   50   48   65   58   62   45    47
class(rmatris)
## [1] "matrix" "array"

cbind()

cmatris <- cbind(boy,kilo) 
dim(cmatris) # 10 x 2
## [1] 10  2
cmatris  # kosegen parantez [satir numarasi, sutun numarasi]
##       boy kilo
##  [1,] 160   55
##  [2,] 165   55
##  [3,] 170   57
##  [4,] 155   50
##  [5,] 167   48
##  [6,] 162   65
##  [7,] 169   58
##  [8,] 158   62
##  [9,] 160   45
## [10,] 164   47
class(cmatris)
## [1] "matrix" "array"

matrix()

Matris olusturmanin diger bir yolunu da matrix() fonksiyonunu kullanmaktadir.

##      [,1]
## [1,]   NA

matrix()

# sutun bazinda
matrix(1:20, nrow = 4, ncol = 5, byrow = FALSE, dimnames = NULL)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20
# satir bazinda
matrix(1:20, nrow = 4, ncol = 5, byrow = TRUE, dimnames = NULL)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15
## [4,]   16   17   18   19   20

matrix()

#Sadece satir ya da sadece sutun sayisi belirlenerek de matris olusturma

matrix(1:20,nrow=4)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20
#Sadece satir ya da sadece sutun sayisi belirlenerek de matris olusturma

matrix(1:20,ncol=5)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20

dim()

dim() fonksiyonu ile vektor matrise donsuturelebilir.

set.seed(41)
v1 <- sample(1:100,20)
dim(v1) <- c(4,5) # 4 * 5 matris olusturma
v1
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   40   72   22   82   76
## [2,]   35   58   59   85   17
## [3,]    5   29   31   92   68
## [4,]   96   70   45   89   52

İslem tersine vector() fonksiyonu ile donusturulebilir.

vektor <- as.vector(v1)
vektor
##  [1] 40 35  5 96 72 58 29 70 22 59 31 45 82 85 92 89 76 17 68 52

Matrislerde veri türleri

Matrisler tek tur veri icerebilir. Örnegin sayisal verilerden olusan bir matrise karakter veriler eklendiginde, vektorlerde oldugu gibi R otomatik duzeltmeye giderek

set.seed(41)
v2 <- sample(1:100,5)
dim(v2) <- c(1,5) # 4 * 5 matris olusturma
v2
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   40   35    5   96   72
rbind(v2, paste("m",1:5, sep="")) # ilk satir da karakter vektore donusturulur.
##      [,1] [,2] [,3] [,4] [,5]
## [1,] "40" "35" "5"  "96" "72"
## [2,] "m1" "m2" "m3" "m4" "m5"
(v3 <- matrix(paste("m",1:5, sep=""),ncol=5))
##      [,1] [,2] [,3] [,4] [,5]
## [1,] "m1" "m2" "m3" "m4" "m5"
cbind(v3, 1) # sayisal nesne karaktere donusturuldu
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] "m1" "m2" "m3" "m4" "m5" "1"

Boyut isimlendirme

Vektorler matrix() fonksiyonu ile birleştirilebilir

boy <- c(160,165,170,155,167,162,169,158,160,164)
kilo <- c(55,55,57,50,48,65,58,62,45,47)
boykilo <- matrix(c(boy,kilo),nrow = 10, ncol = 2)

Matrislerin satir ve sutunlari isimlendirilebilir. Isımlendirme yollarindan biri dimnames() argumaninin kullanilmasidir.

ad <- c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda") # satir isimleri
sutunisim <- c("boy","kilo") # sutun isimleri
(boykilo <- matrix(cbind(boy,kilo),nrow = 10, ncol = 2,
                  dimnames = list(ad,sutunisim)))
##       boy kilo
## Ali   160   55
## Elif  165   55
## Su    170   57
## Deniz 155   50
## Aras  167   48
## Berk  162   65
## Can   169   58
## Ece   158   62
## Efe   160   45
## Arda  164   47

Boyut isimlendirme

Matris boyut isimlendirme islemi matris olusturulduktan sonra da dimnames() fonksiyonu ile yapilabilir.

boykilo1 <- matrix(cbind(boy,kilo),nrow = 10, ncol = 2)

dimnames() fonksiyonu

 dimnames(boykilo1) = list(ad,sutunisim)
 boykilo1
##       boy kilo
## Ali   160   55
## Elif  165   55
## Su    170   57
## Deniz 155   50
## Aras  167   48
## Berk  162   65
## Can   169   58
## Ece   158   62
## Efe   160   45
## Arda  164   47

Boyut isimlendirme

İsimlendirme icin diger bir yol ise colnames() ve rownames() fonksiyonlarinin kullanilmasidir.

boykilo2 <- matrix(cbind(boy,kilo),nrow = 10, ncol = 2)
# sadace sutunlara isim verilmesi
colnames(boykilo2) <- sutunisim
boykilo2
##       boy kilo
##  [1,] 160   55
##  [2,] 165   55
##  [3,] 170   57
##  [4,] 155   50
##  [5,] 167   48
##  [6,] 162   65
##  [7,] 169   58
##  [8,] 158   62
##  [9,] 160   45
## [10,] 164   47

Boyut isimlendirme

# sadace satirla isim verilmesi
rownames(boykilo2) <- ad
boykilo2
##       boy kilo
## Ali   160   55
## Elif  165   55
## Su    170   57
## Deniz 155   50
## Aras  167   48
## Berk  162   65
## Can   169   58
## Ece   158   62
## Efe   160   45
## Arda  164   47

Matrise eleman eklenmesi

Sutun elemanlari eklenmesi cbind() ile

#2x2 lik matris olusturma
(m1 <- matrix(1:4,nrow=2))
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
# m1 matrisine cbind() ile ucuncu sutunun eklenmesi
(m2 <- cbind(m1,5:6))
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

Matrise eleman eklenmesi

Satir elemanlari eklenmesi rbind() ile

#2x2 lik matris olusturma
set.seed(41)
(m3 <- matrix(sample(1:10,4),nrow=2, byrow=TRUE))
##      [,1] [,2]
## [1,]    8    3
## [2,]    5    6
# m1 matrisine cbind() ile ucuncu sutunun eklenmesi
set.seed(41)
(m4 <- cbind(m3,sample(1:10,2)))
##      [,1] [,2] [,3]
## [1,]    8    3    8
## [2,]    5    6    3

Matris olusturma

Asagidaki matrisi olusturacak komutu yaziniz.

##     c1  c2  c3  c4  c5
## r1  10  20  30  40  50
## r2  60  70  80  90 100
## r3 110 120 130 140 150
## r4 160 170 180 190 200

Matris islemleri

Matrisi bir sayi ile toplama islemi, matris ile aynı boyutta her elemani belirtilen sayi olan matrisle toplama islemidir.

(m1 <- matrix(1:4,nrow=2))
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
# matrisi bir sayi ile toplama
m1 + 10
##      [,1] [,2]
## [1,]   11   13
## [2,]   12   14

Matris islemleri

Aynı boyutta iki matrisi toplama

dim(m1)
## [1] 2 2
(m2 <- matrix(10,nrow=2,ncol=2))
##      [,1] [,2]
## [1,]   10   10
## [2,]   10   10
dim(m2)
## [1] 2 2
m1 + m2
##      [,1] [,2]
## [1,]   11   13
## [2,]   12   14

Matris islemleri

Bir matrisi tek elamanli bir vektor ile carpma

m3<- matrix(1:10,ncol=5,byrow = TRUE);m3
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
m3 * 2
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    2    4    6    8   10
## [2,]   12   14   16   18   20

Matris islemleri

Bir matrisi cok elamanli bir vektor ile carpma

m3<- matrix(1:10,ncol=5,byrow = TRUE);m3
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
m3 * 1:4
## Warning in m3 * 1:4: uzun olan nesne uzunluğu kısa olan nesne uzunluğunun bir
## katı değil
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    6    3   12    5
## [2,]   12   28   16   36   20

Matris islemleri

Ayni boyutta iki matrisin carpimi

m4 <- matrix(1:4, nrow=2);m4
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
m5<- matrix (11:14, nrow=2);m5
##      [,1] [,2]
## [1,]   11   13
## [2,]   12   14
m4*m5
##      [,1] [,2]
## [1,]   11   39
## [2,]   24   56

Matris islemleri

Matris carpimi yapmak icin %*% operatoru ile yapilabilir.

m4%*%m5
##      [,1] [,2]
## [1,]   47   55
## [2,]   70   82

Matrisin transpozu ise t() fonksiyonu ile alinir.

t(m4)
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4

Matris islemleri

Bir matrisin transpozu ile carpimi

m4%*%t(m4)
##      [,1] [,2]
## [1,]   10   14
## [2,]   14   20

Matris islemleri

Matrislerde satir ve sutun bazinda islem yapabilecek bazi fonksiyonlar:

Satir ortalamalari rowMeans()

Sutun ortalamalari colMeans()

Satir toplamlari rowSums()

Sutun toplamlari colSums()

Matrisin determinantı det()

Matrisin ozdegeri eigen()

Ayrica matrixcalc ve matlib paketlerinde cok sayida fonksiyon bulunur.

Matris islemleri

Matrisinin sutun ortalamalarinin hesaplanmasi

colMeans(boykilo)
##   boy  kilo 
## 163.0  54.2

Matrisinin satir ortalamalarinin hesaplanmasi

rowMeans(boykilo)
##   Ali  Elif    Su Deniz  Aras  Berk   Can   Ece   Efe  Arda 
## 107.5 110.0 113.5 102.5 107.5 113.5 113.5 110.0 102.5 105.5

Matris islemleri

m1 matrisine bireylerin BKI degerlerini yeni bir sutun olarak ekleyiniz. BKI vucut agirliginizin metre cinsinden boy uzunlugunun karesine bolunmesi ile elde edilir. Islemi yapmadan once calisma alanindan boy ve kilo nesnelerini kaldiriniz. Islemi sadece boykilo matrisi uzerinden gerceklestiriniz.

##       boy kilo      
## Ali   160   55 21.48
## Elif  165   55 20.20
## Su    170   57 19.72
## Deniz 155   50 20.81
## Aras  167   48 17.21
## Berk  162   65 24.77
## Can   169   58 20.31
## Ece   158   62 24.84
## Efe   160   45 17.58
## Arda  164   47 17.47

Matris elemanlarini secme-I

Matris elemanlari indekslerle, boyut isimleriyle ve mantiksal operatorlerle secilebilir.

Matrislerden satir elemani secimi matris [satirindeks, ]

Matrislerden sutun elemani secimi matris [ ,sutunindeks ]

Matrislerden satir ve sutun elemani secimi matris [satirindeks,sutunindeks ]

Matris elemanlarini secme-II

İsimlendirilmis matrislerde indekslerle secim yapilabilecegi gibi indekslerle de secim yapilabilir.

Indeksle secim

boykilo[1,]        
##  boy kilo 
##  160   55

Isımle secim

boykilo["Ali",]
##  boy kilo 
##  160   55

Matris elemanlarini secme-III

Matrisinin birinci ve ucuncu satir elemanlarinin secilmesi

boykilo[c(1,3),] 
##     boy kilo
## Ali 160   55
## Su  170   57

Matrisinin birinci ve ucuncu satir elemanlarinin secilmesi

boykilo[c("Ali","Su"),] 
##     boy kilo
## Ali 160   55
## Su  170   57

Matris elemanlarini secme-IV

Ucuncu satirda yer alan ogrencinin boyunun secilmesi

boykilo[3,1]
## [1] 170

Ucuncu satirda yer alan ogrencinin boyunun secilmesi

boykilo["Su","boy"]
## [1] 170

Matris elemanlarini secme-V

Matrislerse sutun secimi

boykilo[ ,"boy"]
##   Ali  Elif    Su Deniz  Aras  Berk   Can   Ece   Efe  Arda 
##   160   165   170   155   167   162   169   158   160   164

Matrislerse sutun secimi

boykilo[ ,1]
##   Ali  Elif    Su Deniz  Aras  Berk   Can   Ece   Efe  Arda 
##   160   165   170   155   167   162   169   158   160   164

Matris elemanlarini secme-VI

Haric tutulma islemi ise - opertoru ile yapilabilir.

Matrisin birinci satirinin haric tutulmasi

boykilo[ -1, ]
##       boy kilo
## Elif  165   55
## Su    170   57
## Deniz 155   50
## Aras  167   48
## Berk  162   65
## Can   169   58
## Ece   158   62
## Efe   160   45
## Arda  164   47

Matris elemanlarini secme-VI

Matrisin birinci ve besincei satirinin haric tutulmasi

boykilo[ -c(1,5), ]
##       boy kilo
## Elif  165   55
## Su    170   57
## Deniz 155   50
## Berk  162   65
## Can   169   58
## Ece   158   62
## Efe   160   45
## Arda  164   47

Birinci sutunun haric tutulmasi

boykilo[ , -1]
##   Ali  Elif    Su Deniz  Aras  Berk   Can   Ece   Efe  Arda 
##    55    55    57    50    48    65    58    62    45    47

Matris elemanlarini secme-VII

Mantiksal ifadeler kullanarak da matristen eleman secimi yapilabilir.

Boyu 160cm’den uzun olan kisilerin kilolarinin secilmesi

boykilo[boykilo[,1]>160,2]
## Elif   Su Aras Berk  Can Arda 
##   55   57   48   65   58   47

Boyu 160cm’den uzun olanlar kisilerin boy ve kilolarinin secilmesi

boykilo[boykilo[,1]>160,1:2]
##      boy kilo
## Elif 165   55
## Su   170   57
## Aras 167   48
## Berk 162   65
## Can  169   58
## Arda 164   47

Gunun Sorusu - I

islem adinda iki argumanli bir fonksiyon yaziniz. Yazdiginiz fonksiyon girilen iki degerin toplamini, farkini, carpimini ve bolumunu versin. Yazdiginiz fonksiyonun asagidaki ciktilari vermesi beklenmektedir.

islem(1,3)
## [1]  4.0000000 -2.0000000  3.0000000  0.3333333
islem(2,4)
## [1]  6.0 -2.0  8.0  0.5
islem()
## [1]   0   0   0 NaN

KAYNAKCA

Atar, B., Atalay Kabasakal, K, Ünsal Özberk, E. B., Özberk, E. H. Ve Kıbrıslıoğlu Uysal, N. (2020).  R ile Veri Analizi ve Psikometri Uygulamaları, Editör, Pegem Akademi, Ankara.

ODEV

(Kitap - Bölüm1 - Alıştırmalar)

swirl package - learn R in R