8  Vektörler

Ancak dikkat ederseniz sadece tek bir eleman üzerinde işlemlerimizi gerçekleştirdik. Gerçek bir veri analizi senaryosunda ise tek bir örnek değil, bir grup örnek ile çalışmamız gerekmektedir.

8.1 Nasıl vektör oluşturulur?

R üzerinde farklı veri yapıları bulunmaktadır. Bunlarda bir tanesi vektörler olarak adlandırılır. Vektörler, kısaca belli bir tipte veri tipini içeren listeler olarak tanımlanabilir. Bir vektör oluşturmak istiyorsanız c() fonksiyonunu kullanmanız gerekmektedir:

vektor1 <- c(12, 43, 45)

Oluşturduğunuz vektor1 isimli vektör, üç tane elemana sahiptir. Bu elemanları dikkat ederseniz , ile ayırdık.

İsterseniz karakter vektörleri de oluşturabilirsiniz:

vektor2 <- c("bitki1", "bitki2", "bitki3")

Ya da mantıksal vektörler:

vektor3 <- c(TRUE, FALSE, TRUE, FALSE)

Ya da faktör vektörleri:

vektor4 <- factor(c("karanlik", "aydinlik", "karanlik", "aydinlik"))

Dikkat ederseniz önce c() fonskiyonu ile vektör oluşturduk, ardından factor fonksiyonu ile faktör’e çevirdik.

İstersek iki farklı vektörü birleştirebiliriz. Önce iki farklı vektör oluşturalım:

x <- c(12, 34, 56)
y <- c(39, 45, 67)

Şimdi bu iki vektörü birleştirelim:

yeni_vektor <- c(x, y)

Bu vektörü ekrana yazdıralım:

yeni_vektor
[1] 12 34 56 39 45 67

Dikkat ederseniz, değişken isiminde birden fazla kelime varsa, bu kelimeleri _ ile ayırdık. Siz de buna dikkat edin lütfen.

Farklı veri tiplerini vektörde birleştirmek

Acaba iki farklı tipte vektörü birleştirirseniz ne olur? Mesela bir karakter vektörü ile bir sayı vektörünü birleştirmeyi deneseniz olur mu?

vektor <- c("bitki1", "bitki2", 12, 45)
str(vektor)
 chr [1:4] "bitki1" "bitki2" "12" "45"

Dikkat ederseniz, artık bir karakter vektörümüz oldu. Farklı veri tiplerini birleştiriken dikkat etmelisiniz. Beklemediğiniz sonuçlarla karşılaşabilirsiniz.

8.2 Vektör oluşturma üzerine örnekler

Aşağıdaki tablo, hayali bir deneyi tarif etmektedir. Bir türe ait 10 tane bitkinin, farklı ışık koşullarında yaprak uzunlukları ölçümleri alınmıştır. Acaba her sütundan bir vektör oluşturabilir miyiz? Bu örnek için Tablo 8.1’e bakınız. Dikkat edin ölçüm alınamayan noktalar var.

Tablo 8.1: Hayali veri setimizdeki bitkiler
Bitki İsmi Yaprak Uzunluğu (cm) Deney Koşulları
bitki1 2.3 Karanlık
bitki2 3.4 Aydınlık
bitki3 4.5 Aydınlık
bitki4 1.2 Karanlık
bitki5 3.4 Aydınlık
bitki6 - Karanlık
bitki7 1.8 Karanlık
bitki8 6.3 Aydinlik
bitki9 2.1 Karanlık
bitki10 - Karanlık

Öncelikle bitki isimleri için bir karakter vektörü oluşturalım:

bitki_ismi <- c("bitki1", "bitki2", "bitki3", "bitki4", "bitki5", 
                "bitki6", "bitki7","bitki8", "bitki9", "bitki10")

Şimdi ise yaprak uzunluğu için bir sayı vektörü oluşturalım. Burada dikkat ediniz, belirlenemyen ölçümlere NA ekliyoruz!

yaprak_uzunlugu <- c(2.3, 3.4, 4.5, 1.2, 3.4, 
                    NA, 1.8, 6.3, 2.1, NA)
NA karakterinin kullanımı

Bu karakter, farklı veri tipleri ile bir vektör içerisinde kullanılabilir.

Son olarak deney koşulları için bir vektör oluşturmamız gerekli. Dikkat edin, deney koşulları aslında bir kategori ifade ediyor. Bu nedenle deney koşulları vektörü aslında bir faktör vektörü olmalı:

deney_kosullari <- factor(c("karanlik", "aydinlik", "aydinlik", "karanlik", "aydinlik",
                            "karanlik", "karanlik", "aydinlik", "karanlik", "karanlik"))

Gerçekten faktör vektörü oluşturmuşmuyuz kontrol edelim:

str(deney_kosullari)
 Factor w/ 2 levels "aydinlik","karanlik": 2 1 1 2 1 2 2 1 2 2

Burada levels olarak belirtilen aslında faktör seviyeleri. aydinlik ve karanlik olmak üzere iki farklı seviye bulunmakta ve bu seviyeler 1 ve 2 olarak kodlanmış durumdadır. R üzerinde faktörler, öntanımlı olarak alfabetik sıraya göre kodlanmaktadır.

8.2.1 Vektörün uzunluğunu öğrenmek

Oluşturduğumuz vektörün uzunluğunu elde etmek için ise length fonksiyonunu kullanabiliriz:

length(yaprak_uzunlugu)
[1] 10

8.3 Vektör elemanlarına isim eklemek

Eğer istersek, her vektör elemanına bir isim atayabiliriz.

names(yaprak_uzunlugu) <- bitki_ismi

Atanmış isimleri elde edebiliriz:

names(yaprak_uzunlugu)
 [1] "bitki1"  "bitki2"  "bitki3"  "bitki4"  "bitki5"  "bitki6"  "bitki7" 
 [8] "bitki8"  "bitki9"  "bitki10"

Ancak dikkat edin, kullandığınız her iki vektörün aynı uzunlukta olması gereklidir.

8.4 Vektörlerde indis kullanımı

Peki vektör içerisindeki elemanlara nasıl erişiriz? Bunun için indisler kullanmamız gereklidir. Mesela yukarıda oluşturduğumuz yaprak_uzunlugu vektörü üzerinde ikinci elemanı alalım:

yaprak_uzunlugu[2]
bitki2 
   3.4 

Şimdi de ikinci ve dördüncü elemanlar arasındaki verileri geri döndürelim:

yaprak_uzunlugu[2:4]
bitki2 bitki3 bitki4 
   3.4    4.5    1.2 
Sayı sırası oluşturalım

: operatörü, iki sayı arasındaki sayılardan bir vektör oluşturur (daha ayrıntılı bilgi için Bölüm 8.5):

1:16
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

Eğer vektörümüzdeki elemanların isimleri varsa, bu isimleri de indis olarak kullanabiliriz.

yaprak_uzunlugu["bitki2"]
bitki2 
   3.4 

8.4.1 Vektörleri filtrelemek

Eğer istersek, vektörler içerisinde işlem de yapabiliriz. Mesela yaprak uzunluğu 3’den büyük olan bitkileri geri döndürelim:

yaprak_uzunlugu > 3
 bitki1  bitki2  bitki3  bitki4  bitki5  bitki6  bitki7  bitki8  bitki9 bitki10 
  FALSE    TRUE    TRUE   FALSE    TRUE      NA   FALSE    TRUE   FALSE      NA 

Bir mantıksal vektör elde ettik. İstersek bu vektörü, başka bir vektöre indis olarak da kullanabiliriz:

bitki_ismi[yaprak_uzunlugu > 3]
[1] "bitki2" "bitki3" "bitki5" NA       "bitki8" NA      

8.4.2 Vektörlerden eleman çıkartmak

Eğer - işareti ile eksi indis verirsek, o elemanı vektörden çıkartabiliriz:

yaprak_uzunlugu[-5]
 bitki1  bitki2  bitki3  bitki4  bitki6  bitki7  bitki8  bitki9 bitki10 
    2.3     3.4     4.5     1.2      NA     1.8     6.3     2.1      NA 
Dikkat

Dikkat edin, burada yaprak_uzunlugu vektörünün beşinci elemanı doğrudan çıkartılmadı, sadece beşinci elemanı çıkartılmış bir vektör geri döndürüldü.

8.5 seq fonksiyonu ile çalışmalar

Bu fonksiyon sayesinde iki farklı sayı arasında, belirli aralıklara göre bir sayı vektörü oluşturulabilir.

Mesela 2 ile 16 arasında 1 artışla bir vektör oluşturalım:

seq(2,16)
 [1]  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

Ya da kısaca bu şekilde de oluşturabiliriz:

2:16
 [1]  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

Artış mikarını kendimiz belirliyebiliriz. Mesela her adımda 2 sayı artış olsun:

seq(2, 16, 2)
[1]  2  4  6  8 10 12 14 16

8.6 Sonuç

Bu kısım kapsamında aşağıdaki konular önemlidir:

  • Bir vektör oluşturmak için c() fonksiyonunu kullanırız ve vektör elemanlarını , ile ayırırız.
  • Bir vektörün uzunluğunu öğrenmek için length() fonksiyonunu kullanırız.
  • Vektör içinde bir ya da bir grup elemanı geri döndürmek için ise indisler kullanırız yaprak_uzunlugu[5]
  • seq fonksiyonu kullanımı