R Vektorler

Dr. Kubra Atalay Kabasakal

Kasim 2021

VEKTORLER

Vektor Olusturma

(sayisal_vektor <-  c(1,2,3))
## [1] 1 2 3
# sayisal_vektor nesnesinin turu nedir?
# tam sayi (integer), dogal sayi (double)?
# sorgulayin, diger ture donusturun.
(karakter_vektor <-  c("a","b","c"))  ## cift tirnak
## [1] "a" "b" "c"
(mantiksal_vektor <- c(TRUE,TRUE,FALSE))
## [1]  TRUE  TRUE FALSE

Vektor Turleri

# hem karakter hem sayisal deger iceren bir vektor olustup,
# nesneyi yazdirin ve sinifini sorgulayin.
# hem mantiksal hem sayisal deger iceren bir vektor olustup

# nesneyi yazdirin ve sinifini sorgulayin.

Vektor Islemleri - I

Vektor uzunlugu length() fonksiyonu ile vektor turleri ise class(), mode() ya da typeof() fonksiyonlari ise tur belirlemek icin kullanilmaktadir.

# Vektorler bir veya daha fazla elemandan olusabilmektedir.
a <- 1  # tek elemandan olusur.
# Vektor uzunlugunu ogrenmek icin length() fonksiyonu
length(a)
## [1] 1

Vektor Islemleri - II

x <- 1:10
# bir vektorundeki verilerin toplanmasi
sum(x)
## [1] 55
# bir vektorundeki verilerin carpilmasi
prod(x)
## [1] 3628800
# bir vektorundeki verilerin kumulatif toplamlarinin ve carpimlarinin alinmasi
cumsum(x); cumprod(x)
##  [1]  1  3  6 10 15 21 28 36 45 55
##  [1]       1       2       6      24     120     720    5040   40320  362880
## [10] 3628800

Vektor Islemleri - III

# bir vektorundeki verilerin kucukten buyuge siralanmasi
sort(x)
##  [1]  1  2  3  4  5  6  7  8  9 10
# bir vektorundeki verilerin buyukten kucuge siralanmasi

# bir vektorunun elemanlarin siralarinin tersine cevrilmesi
rev(x)
##  [1] 10  9  8  7  6  5  4  3  2  1

Vektor Islemleri - IV

# bir vektorundeki verilerin standart sapmasinin hesaplanmasi
sd(x)
## [1] 3.02765
# bir vektorundeki en buyuk verinin gosterilmesi
max(x)
## [1] 10
# bir vektorundeki en kucuk verinin gosterilmesi
min(x)
## [1] 1

Vektor Islemleri - V

# En buyuk verinin vektorun kacinci elemani oldugunun gosterilmesi 
which.max(x)
## [1] 10
# En kucuk verinin vektorun kacinci elemani oldugunun gosterilmesi 
which.min(x)
## [1] 1
# bir vektorune iliskin ozet bilgilerin verilmesi
summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    3.25    5.50    5.50    7.75   10.00

Vektor Elemanlarini Secme - I

Vektorlerden eleman sirasi, isim ve mantiksal operatorler olmak uzere uc farkli yolla eleman secilebilir.

ad  <-  c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda")
# ad vektorunun 1. elemanini secilmesi  "[]" operatoru 
ad[1]
## [1] "Ali"
# ad vektorunun 5. elemaninin secilmesi
ad[5]
## [1] "Aras"
# ad vektorunun son elemaninin secilmesi 
ad[10] 
## [1] "Arda"
# vektorun 10 elemanli oldugunu bilmediginiz de ne yaparsiniz?

Vektor Elemanlarini Secme - II

# birden fazla eleman secimi
# DIKKAT!
# c() fonksiyonu kullanilmazsa, hata mesaji ad[(1,5,8)]
ad[c(1,5,8)]
## [1] "Ali"  "Aras" "Ece"
# Vektorun sadece birinci elemaninin islem disinda tutulmasi
ad[-1]
## [1] "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"   "Arda"
# Vektorun birinci ve besinci elemanlarinin islem disinda tutulmasi
ad[-c(1,5)]
## [1] "Elif"  "Su"    "Deniz" "Berk"  "Can"   "Ece"   "Efe"   "Arda"
# Vektorun sadece belirli bir araliktaki elemanlarinin secilmesi
ad[3:5]
## [1] "Su"    "Deniz" "Aras"

Vektor Elemanlarini Secme - III

# Vektorun son uc elemaninin secilmesi (2 farkli sekilde)

Vektore Eleman Eklenmesi

# Vektore bir eleman eklenmesi
ad[11] <- "Asu"; ad
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda"  "Asu"
# Vektore birden fazla eleman eklenmesi
ad[12:13] <- c("Ahu","Han"); ad
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda"  "Asu"   "Ahu"   "Han"

Vektore Eleman Eklenmesi

# Vektorun ortasina eleman eklenmesi
# ?append() fonksiyonu ile yapilabilir. Fonksiyon yardim sayfasini inceleyiniz.

(ad <- append(ad, "Taha", after = 3))
##  [1] "Ali"   "Elif"  "Su"    "Taha"  "Deniz" "Aras"  "Berk"  "Can"   "Ece"  
## [10] "Efe"   "Arda"  "Asu"   "Ahu"   "Han"
# ya da c() fonksiyonu ile yapilabilir.

ad <- c(ad[1:5],"Selim",ad[7:length(ad)]); ad
##  [1] "Ali"   "Elif"  "Su"    "Taha"  "Deniz" "Selim" "Berk"  "Can"   "Ece"  
## [10] "Efe"   "Arda"  "Asu"   "Ahu"   "Han"

Vektore Eleman Eklenmesi

10 kisiden olusan bir gruptaki kisilerinin boy uzunluklari icin ise asagidaki vektor olusturulmustur.

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

Nesneye deger atama islemi assign() fonksiyonu ile de yapilabilmektedir.

# atama operatoru <- yerine assign fonksiyonu kullanimi
# eksik veri icin NA 
(assign("v1", c(160,165,170,155,167,162,169,158,160,NA)))
##  [1] 160 165 170 155 167 162 169 158 160  NA
(assign("v2", c(50,55,57,50,48,65,58,62,45,NA)))
##  [1] 50 55 57 50 48 65 58 62 45 NA

Vektor Elemanlarini Secme - Isim ile

Eger elimizdeki vektor isimlendirilmis bir vektor ise eleman secimini isimle de yapabiliriz.

#isimsiz boy vektoru
boy
##  [1] 160 165 170 155 167 162 169 158 160 164
names(boy) # names() fonksiyonu ile isimlendirme yapilabilir.
## NULL
# ad vektorunu boy vektorunu isimlendirirken kullanabiliriz.
ad  <-  c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda")
names(boy) <- ad

Vektor Elemanlarini Secme - Isim ile

boy
##   Ali  Elif    Su Deniz  Aras  Berk   Can   Ece   Efe  Arda 
##   160   165   170   155   167   162   169   158   160   164
# isimlendirilmis vektorde eleman secimi
boy["Ali"]
## Ali 
## 160
# isimlendirilmis vektoru isimsiz hale getirme
unname(boy); names(boy) <- NULL
##  [1] 160 165 170 155 167 162 169 158 160 164

Vektor Elemanlarini Secme - Mantiksal Opertor ile

boy
##  [1] 160 165 170 155 167 162 169 158 160 164
# Boyu 165cm'den kisa olanlarin belirlenmesi
boy < 165
##  [1]  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
# Boyu 165cm'den kisa olanlarin kisa_boy vektorune atanmasi
kisa_boy <- boy [boy<165]

Vektor Elemanlarini Secme - Mantiksal Opertor ile

# Boyu ortalamadan uzun olanlarin uzun_boy vektorune atanmasi
uzun_boy  <- boy[boy>mean(boy)]
# Uzun_boy vektorunun yazdirilmasi
uzun_boy
## [1] 165 170 167 169 164
# Boylari 160cm'e esit olanlari yazdirilmasi
 which(boy == 160)
## [1] 1 9

Vektor Elemanlarini Secme - Mantiksal Opertor ile

# Boyu 165cm'den uzun olan ve kilosu 50kg'den az olanlarin belirlenmesi
boy[boy>165 & kilo <50]
## [1] 167
# Boyu 167 cm'den uzun olan veya kilosu 60 kg'dan fazla olanlarin belirlenmesi
boy[boy>167 | kilo>60]
## [1] 170 162 169 158

Belirli Oruntulerle Vektor Olusturma

Vektor olusturmanin farkli yollari bulunmaktadir.

En basit yolu iki nokta ":" operatorunu kullanmaktir.

rakamlar <- 0:9
rakamlar
##  [1] 0 1 2 3 4 5 6 7 8 9
assign("rakamlar",0:9)
# buyukten kucuge rakamlardan vektor olusturulmasi
rakamlar <- 9:0
rakamlar
##  [1] 9 8 7 6 5 4 3 2 1 0
assign("rakamlar",9:0)

seq()

Belirli bir kurala gore sayi dizileri olusturmak icin ise seq(), rep()ve paste() fonksiyonlarindan yararlanilabilir. Ilk olarak bu fonksiyonlarin yardim sayfalarini inceleyelim.

# 1'den 10'a kadar birer birer artan sayilardan dizi olusturulmasi
# ...................
# seq() fonksiyonu arguman isimleri kullanilmadan calistirilmasi
# .................
# ayni ciktiyi tek bir argumanla elde edebilir misiniz?
# ....................
# length argumani ile istenilen uzunlukta vektor olusturulmasi
# .......................
# Artis miktarinin by argumani ile ayarlanmasi
# .............................
# Belirli bir aralikta kac elemanin yer alacaginin length.out argumani ile belirlenmesi

rep()

rep() fonksiyonu icin ornekler

# uc elemanli bir vektorun uc kere tekrar ettirilmesi
rep(c(3,4,5), 3)
## [1] 3 4 5 3 4 5 3 4 5
# rakamlarin uc kere tekrar ettirilmesi
rep(0:9, times = 3) 
##  [1] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9

Ciktiyi elde edecek kodlar hazirlayiniz.

## [1] 3 3 3 5 5 5 7 7 7

rep()

Ciktiyi elde edecek kodlar hazirlayiniz.

##  [1] 3 3 3 5 5 5 7 7 7 3 3 3 5 5 5 7 7 7 3 3 3 5 5 5 7 7 7

Ciktiyi elde edecek kodlar hazirlayiniz.

## [1] 1 1 2 2 3 3 4 4

Ciktiyi elde edecek kodlar hazirlayiniz.

## [1] 1 2 2 3 3 3

paste()

paste()fonksiyonu ciktisi her zaman icin karakterdir.

paste(1:4) # ciktisi karakterdir
## [1] "1" "2" "3" "4"
class(paste(1:4)) 
## [1] "character"

Ciktiyi elde edecek kodlar hazirlayiniz.

##  [1] "test 1"  "test 2"  "test 3"  "test 4"  "test 5"  "test 6"  "test 7" 
##  [8] "test 8"  "test 9"  "test 10"

paste()

Ciktiyi elde edecek kodlar hazirlayiniz.

##  [1] "test1"  "test2"  "test3"  "test4"  "test5"  "test6"  "test7"  "test8" 
##  [9] "test9"  "test10"

Ciktiyi elde edecek kodlar hazirlayiniz.

##  [1] "test_1_puan"  "test_2_puan"  "test_3_puan"  "test_4_puan"  "test_5_puan" 
##  [6] "test_6_puan"  "test_7_puan"  "test_8_puan"  "test_9_puan"  "test_10_puan"

Ciktiyi elde edecek kodlar hazirlayiniz.

## [1] "test A" "test B" "test C" "test D" "test 1" "test 2" "test 3"

Rasgele Veri Olusturma

Farkli fonksiyonlarla rastgele veri uretilebilir. Ornegin 0-100 arasinda 20 farkli deger elde edilmek istenilsin. Bunu yapmak icinsample(),runif() ya da rnorm() fonksiyonlarindan yararlanilabilir.

sample(0:100,20)
##  [1] 30 66 86 76 40 92 52 70 31 84 69 99  2 43 93  7 32 56 18 90
runif(20,  0, 100)
##  [1] 27.364232 35.157851 99.714875 63.269646 52.403334 46.303464 34.346245
##  [8]  5.852397 68.022405  6.686886  9.474245 86.703290 35.574144 17.532907
## [15] 45.719526 37.976879 27.673968 62.470301 30.616680 31.876953
rnorm(20,50,10)
##  [1] 64.28546 49.53312 59.77498 40.65678 42.90669 62.49588 43.90385 51.79838
##  [9] 52.54181 50.74519 49.38912 55.19452 53.70119 75.10855 48.54096 59.00080
## [17] 64.78947 58.31075 43.25978 56.33217

Kullanilan uc fonksiyonun da yardim sayfalarini ve kullanim amaclarini inceleyiniz.

Vektor Aritmetigi - I

Vektorler ayni uzunlukta oldugunda, her iki vektorun elemanlari sirasi ile bire bir isleme alinmaktadir.

v1 <- c(5,10,15,20)

v2 <- c(1,2,3,4)

v1-v2
## [1]  4  8 12 16
v1*v2
## [1]  5 20 45 80
v1/v2
## [1] 5 5 5 5
v1^v2
## [1]      5    100   3375 160000

Vektor Aritmetigi - II

Vektorler ayni uzunlukta degilse ne olur?

v3 <- c(4,16,25,100)
sqrt(v1) + 2 # uzun vektor/kisa vektor kadar tekrar
## [1] 4.236068 5.162278 5.872983 6.472136

Vektorler ayni uzunlukta degilse ne olur? Eger vektor uzunlukları oranlari tam sayi degilse uyari verir.

v4<- c(1,2,3,4)
v5 <- c(1,2,3,4,5,6)

v4*v5
## Warning in v4 * v5: uzun olan nesne uzunluğu kısa olan nesne uzunluğunun bir
## katı değil
## [1]  1  4  9 16  5 12

Vektor Aritmetigi - III

BKI vucut agirliginizin metre cinsinden boy uzunlugunun karesine bolunmesi ile elde edilmektedir. Her bir bireye ait BKI degerini hesaplayiniz.

ad  <-  c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda")
boy <- c(160,165,170,155,167,162,169,158,160,164)
kilo <- c(55,55,57,50,48,65,58,62,45,47)

Vektor Aritmetigi - IV

Asagidaki tabloda yer alan uc sutun icin birer vektor olusturunuz. Ogrencilerin gecme notu her iki sinavin ortalamasi olarak hesaplanacaktir. Bu ogrencilerin gecme notlarini hesaplayiniz. Gecme notlarinin betimsel istatistiklerini hesaplayiniz.

Ogrenci Vize Final
Ogrenci1 50 45
Ogrenci2 55 65
Ogrenci3 60 85
Ogrenci4 70 90
Ogrenci5 80 85

Gunun Bonuslari

Soru 1: Birden n’e kadar olan sayilarin toplamini hesaplayan fonksiyon yazimi toplam() tek argumanli fonksiyon olsurunuz. Arguman degeri 5 oldugunda 1+2+3+4+5=15 degerini versin. birden n’e kadar olan sayilarin toplami: (n*(n+1))/2

## [1] 15

Soru 2: 1’den n’ e kadar olan sayıların toplamını hesaplayan fonksiyonu argümansız olarak aşağıdaki şekilde yazmayı deneyiniz. Fonksiyonu çalıştırdığınızda ekranda/konsolda kaca kadar olan sayilarin toplami hesaplansin: yazsın, kullanıcının girdiği değere göre aşağıda çıktısı çıksın.

toplam()

kaca kadar olan sayilarin toplami hesaplansin: 10

[1] " 10 ’e kadar olan sayilarin toplami: 55

Gunun Bonuslari

Soru 3: Yazilan kare_toplam() fonksiyonu 1’den n’e kadar olan sayilarin karelerinin toplamini versin. 1 + 2^2 + …+ n^2

## [1] 385
## [1] 1240

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