10  Veri Çerçeveleri

Bir önceki derste matrisleri inceledik. Matrisler, tek bir veri tipine sahip iki boyutlu yapılardı. Ancak vektörler bölümünde (Bölüm 8), farklı veri tiplerini kullanmıştık. Yani gerçek bir veri analizi senaryosunda aslında elimizde farklı tipte veriler bulunmaktaydı.

Veri çerçeveleri aslında bu farklı veri tiplerini bir arada toplayabilme kabiliyetine sahiptir.

Genel olarak veri çerçeveleri, farklı veri tiplerine sahip vektörlerden oluşmuştur. Kullandığımız vektörlerin uzunluklarının aynı olması gereklidir. Gelin şimdi Bölüm 8’de işlediğimiz Tablo 8.1 versini veri çerçevesine çevirelim.

Hatırlarsanız öncelikle vektörler tanımlamıştık.

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

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


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

Şimdi ise bu vektörleri bir veri çerçevesi içerisinde birleştirelim:

veri <- data.frame(bitki_ismi = c("bitki1", "bitki2", 
                                    "bitki3", "bitki4", 
                                    "bitki5", "bitki6", 
                                    "bitki7","bitki8", 
                                    "bitki9", "bitki10"),
                    yaprak_uzunlugu = c(2.3, 3.4, 4.5, 1.2, 3.4, 
                                            NA, 1.8, 6.3, 2.1, NA),
                    deney_kosullari = factor(c("karanlik", "aydinlik", 
                                                    "aydinlik", "karanlik", 
                                                    "aydinlik", "karanlik", 
                                                    "karanlik", "aydinlik", 
                                                    "karanlik", "karanlik"))
)

Şimdi gelin str fonksiyonu ile oluştruduğumuz veri çerçevesini inceleyelim:

str(veri)
'data.frame':   10 obs. of  3 variables:
 $ bitki_ismi     : chr  "bitki1" "bitki2" "bitki3" "bitki4" ...
 $ yaprak_uzunlugu: num  2.3 3.4 4.5 1.2 3.4 NA 1.8 6.3 2.1 NA
 $ deney_kosullari: Factor w/ 2 levels "aydinlik","karanlik": 2 1 1 2 1 2 2 1 2 2

Dikkat ederseniz her sütun artık farklı bir tipe sahip.

10.1 Veri Çerçevesi boyutları

Elimizdeki veri çerçevesinin boyutlarını aynı matrisler gibi öğrenebiliriz.

dim(veri)
[1] 10  3

Satır sayısı:

nrow(veri)
[1] 10

Sütun sayısı:

ncol(veri)
[1] 3

10.2 Sütun ve satır isimleri

Her veri çerçevesinin bir sütun ismi olması gerekir. Sütun isimlerini colnames fonksiyonu ile öğrenebiliriz:

colnames(veri)
[1] "bitki_ismi"      "yaprak_uzunlugu" "deney_kosullari"

Aynı şekilde, her veri çerçevesinde bir satır ismi de bulunmaktadır. Bunu da rownames fonksiyonu ile öğrenebiliriz:

rownames(veri)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"

İstersek satır ve sütun isimlerini değiştirebiliriz:

colnames(veri) <- c("isim", "uzunluk", "kosul")
rownames(veri) <- c("bitki1", "bitki2", "bitki3", "bitki4", "bitki5", 
                        "bitki6", "bitki7","bitki8", "bitki9", "bitki10")
Dikkat!

Satır ve sütun isimleri mutlaka tekil olmalıdır. Yani her satır ismi ve her sütun ismi tek olmalı. Yukarıdaki örnekte satır isimlerinde iki tane bitki8 yazma şansımız yoktur. Yoksa hata alırsınız.

Şimdi tekrar veri çerçevesini ekrana yazdıralım:

veri
           isim uzunluk    kosul
bitki1   bitki1     2.3 karanlik
bitki2   bitki2     3.4 aydinlik
bitki3   bitki3     4.5 aydinlik
bitki4   bitki4     1.2 karanlik
bitki5   bitki5     3.4 aydinlik
bitki6   bitki6      NA karanlik
bitki7   bitki7     1.8 karanlik
bitki8   bitki8     6.3 aydinlik
bitki9   bitki9     2.1 karanlik
bitki10 bitki10      NA karanlik

Elimizdeki veri çerçeveleri çok uzun olabilir, bu yüzden verinin hepsini ekrana yazdırmak istemeyebiliriz. head komutu, bize veri çerçevesinin ilk bir kaç satırını ekrana yazdırma şansı verir:

head(veri)
         isim uzunluk    kosul
bitki1 bitki1     2.3 karanlik
bitki2 bitki2     3.4 aydinlik
bitki3 bitki3     4.5 aydinlik
bitki4 bitki4     1.2 karanlik
bitki5 bitki5     3.4 aydinlik
bitki6 bitki6      NA karanlik

10.3 Veri çerçevesi işlemleri

Bir veri çerçevesinde, aynı matris gibi hareket edebiliriz. Mesela ikinci satırın üçüncü sütunundaki veriyi elde edelim:

veri[2,3]
[1] aydinlik
Levels: aydinlik karanlik

Şimdi sadece ikinci sütunu elde edelim:

veri[,2]
 [1] 2.3 3.4 4.5 1.2 3.4  NA 1.8 6.3 2.1  NA

Şimdi de üçünücü satırı elde edelim:

veri[3,]
         isim uzunluk    kosul
bitki3 bitki3     4.5 aydinlik

İstersek sadece sütun isimlerini de kullanabiliriz. Önce sütun isimlerine bakalım:

colnames(veri)
[1] "isim"    "uzunluk" "kosul"  

Sadece yaprak uzunluklarına bakalım:

veri$uzunluk
 [1] 2.3 3.4 4.5 1.2 3.4  NA 1.8 6.3 2.1  NA

Eğer $ işaretini kullanırsak, doğrudan sütun isimleri ile çalışabiliriz. Bu bize bir vektör geri döndürdü.

Peki yaprak uzunlukları vektöründeki 5. elemanı elde etmek istersek:

veri$uzunluk[5]
[1] 3.4

Bunu şu şekilde de yapabiliriz:

veri[5,2]
[1] 3.4

Bu iki işlem de bize aynı sonucu verecektir. Dolayısıyla istediğimizi kullanabiliriz.