17 List
Farklı değişken tipleriyle vektör oluşturduğumuzda bu vektörlerin classları hangi değişken tipi baskınsa ona göre değişmişti. List ise farklı objeleri bir arada tutabileceğimiz yapıdır.
17.1 List Oluşturma
Teknik olarak list bir vektördür. Önceden gördüğümüz vektörler “atomik vektör” olarak da bilinir. List’e ise “yinelemeli” vektör denilebilir.
## [[1]]
## [1] 1
##
## [[2]]
## [1] 2
##
## [[3]]
## [1] 3
##
## [[4]]
## [1] 4
##
## [[5]]
## [1] 5
## [[1]]
## [1] 1 2 3 4 5
## $sayilar
## [1] 1 2 3 4 5
isim <- c("ayşe","ali","fatma")
maas <- c(3000,2800,3200)
sendika <- c(T,F,T)
calisan <- list(İsim = isim, Maas = maas, Sendika = sendika)
calisan ; class(calisan)
## $İsim
## [1] "ayşe" "ali" "fatma"
##
## $Maas
## [1] 3000 2800 3200
##
## $Sendika
## [1] TRUE FALSE TRUE
## [1] "list"
17.2 Elemanlara Ulaşma
Oluşturulan list’in belli bir parçasına ulaşmak için “$” işareti kullanılabilir. Yada " [[ ]] " şeklinde iki tane köşeli parantez kullanılabilir.
## [1] 3000 2800 3200
List’de değiken tipleri değişmediği için, numeric olan bir parçasına istediğimiz matematiksel işlemleri uygulayabiliriz.
## [1] 3200
[[]] kullanılırken içerisine ulaşmak istediğimiz değişkenin ismi tırnak içerisinde grilir ya da indexi sayı ile seçilir.
## [1] "ayşe" "ali" "fatma"
## [1] 3000 2800 3200
## [1] 3000 2800 3200
Tek köşeli parantez kullanılırsa, değikenlere göre seçim yapar
## $İsim
## [1] "ayşe" "ali" "fatma"
##
## $Maas
## [1] 3000 2800 3200
17.3 List’e Eleman Ekleme ve Silme
List oluşturuluken değikenlerin uzunlukları aynı olmak zorunda değildir
## $İsim
## [1] "ayşe" "ali" "fatma"
##
## $Maas
## [1] 3000 2800 3200
##
## $Sendika
## [1] TRUE FALSE TRUE
##
## $yenieleman
## [1] 1 2
## $İsim
## [1] "ayşe" "ali" "fatma"
##
## $Maas
## [1] 3000 2800 3200
##
## $Sendika
## [1] TRUE FALSE TRUE
##
## $yenieleman
## [1] 1 2
##
## [[5]]
## [1] 5
## $İsim
## [1] "ayşe" "ali" "fatma"
##
## $Maas
## [1] 3000 2800 3200
##
## $Sendika
## [1] TRUE FALSE TRUE
##
## $yenieleman
## [1] 1 2
##
## [[5]]
## [1] 5
##
## [[6]]
## [1] TRUE
##
## [[7]]
## [1] TRUE
##
## [[8]]
## [1] TRUE
Silme işlemlerinde değişken yerine “NULL” ataması yapılır.
## $İsim
## [1] "ayşe" "ali" "fatma"
##
## $Maas
## [1] 3000 2800 3200
##
## $Sendika
## [1] TRUE FALSE TRUE
17.4 Listenin Uzunluğu
lenghth() fonksiyonu ile bulunabilir
## [1] 3
Data frame’ler bir bakıma matrislere benzer, satır ve sütunlardan oluşurlar. Matrislerin aksine bir data frame farklı değişken tiplerini içinde barındırabilir. Örneğin bir sütunda kişilerin numeric değerler bir diğerinde ise string değerler bulunabilir. List’in iki boyutlu hali olarak düşünülebilir. Data frame’lerde değişkenlerin gözlem değerlerinin aynı sayıda olmasıdır.
17.5 Data Frame Oluşturma
Data frame oluşturmak için data.frame() fonksiyonu kullanılabilir.
## isimler yaşlar
## 1 ali 22
## 2 ayşe 20
## 3 mehmet 19
17.6 Değerlere Erişmek
List’de olduğu [[]] ya da $ işaretleri kullanılabilir.
## [1] ali ayşe mehmet
## Levels: ali ayşe mehmet
## [1] ali ayşe mehmet
## Levels: ali ayşe mehmet
Bir diğer yöntem ise matrislerdeki gibi tek parantez kullanmaktır. Genel olarak bu yöntem kullanılmaktadır.
## [1] ali ayşe mehmet
## Levels: ali ayşe mehmet
str() fonksiyonu ile data frame’i inceleyebiliriz.
## 'data.frame': 3 obs. of 2 variables:
## $ isimler: Factor w/ 3 levels "ali","ayşe","mehmet": 1 2 3
## $ yaşlar : num 22 20 19
17.7 Alt Data Frame’ler Oluşturma
17.7.1 Veriyi Oluşturma
notlar <- 39:61
durum <- c(rep("kaldi",11),rep("gecti",12))
cinsiyet <- c("erkek","kadin")
cinsiyet <- sample(cinsiyet,23,replace=T)
df2 <- data.frame(Notlar = notlar, GecmeDurumu = durum, Cinsiyet = cinsiyet) ; head(df2)
## Notlar GecmeDurumu Cinsiyet
## 1 39 kaldi erkek
## 2 40 kaldi erkek
## 3 41 kaldi erkek
## 4 42 kaldi kadin
## 5 43 kaldi kadin
## 6 44 kaldi erkek
## Notlar Cinsiyet
## 3 41 erkek
## 4 42 kadin
## 5 43 kadin
## 6 44 erkek
## 7 45 erkek
## 8 46 kadin
Notları 43’den büyük olanlar
## Notlar GecmeDurumu Cinsiyet
## 5 43 kaldi kadin
## 6 44 kaldi erkek
## 7 45 kaldi erkek
## 8 46 kaldi kadin
## 9 47 kaldi erkek
## 10 48 kaldi erkek
## 11 49 kaldi kadin
## 12 50 gecti kadin
## 13 51 gecti kadin
## 14 52 gecti erkek
## 15 53 gecti erkek
## 16 54 gecti kadin
## 17 55 gecti kadin
## 18 56 gecti kadin
## 19 57 gecti kadin
## 20 58 gecti erkek
## 21 59 gecti erkek
## 22 60 gecti erkek
## 23 61 gecti erkek
## Notlar GecmeDurumu Cinsiyet
## 1 39 kaldi erkek
## 2 40 kaldi erkek
## 3 41 kaldi erkek
## 4 42 kaldi kadin
## 5 NA kaldi kadin
## 6 44 kaldi erkek
Matematiksel işlemler data framelerin numeric değerlerine de uygulanabilir.
## [1] NA
## [1] 50.31818
Altküme oluşturmak için subset() fonksiyonu kullanılabilir.
## Notlar GecmeDurumu Cinsiyet
## 9 47 kaldi erkek
## 10 48 kaldi erkek
## 11 49 kaldi kadin
## 12 50 gecti kadin
## 13 51 gecti kadin
## 14 52 gecti erkek
## 15 53 gecti erkek
## 16 54 gecti kadin
## 17 55 gecti kadin
## 18 56 gecti kadin
## 19 57 gecti kadin
## 20 58 gecti erkek
## 21 59 gecti erkek
## 22 60 gecti erkek
## 23 61 gecti erkek
## Notlar GecmeDurumu Cinsiyet
## 4 42 kaldi kadin
## 5 NA kaldi kadin
## 8 46 kaldi kadin
## 11 49 kaldi kadin
## 12 50 gecti kadin
## 13 51 gecti kadin
## 16 54 gecti kadin
## 17 55 gecti kadin
## 18 56 gecti kadin
## 19 57 gecti kadin
17.8 Data Frameleri Birleştirmek
merge() fonksiyonu ile data frameler birleştirilebilir.
isimler <- c("ali","ayse","mehmet","fatma")
isimler1 <- c("ali","ayse","fatma")
boy <-c(170,180,155,150)
kilo <- c(80,70,59)
d1 <- data.frame(İsim = isimler,Boy= boy)
d2 <- data.frame(İsim = isimler1,Kilo = kilo)
d1;d2
## İsim Boy
## 1 ali 170
## 2 ayse 180
## 3 mehmet 155
## 4 fatma 150
## İsim Kilo
## 1 ali 80
## 2 ayse 70
## 3 fatma 59
## İsim Boy Kilo
## 1 ali 170 80
## 2 ayse 180 70
## 3 fatma 150 59
## İsim Boy Kilo ID
## 1 ali 170 80 1
## 2 ayse 180 70 2
## 3 fatma 150 59 3
## İsim Boy Kilo
## 1 ali 170 80
## 2 ayse 180 70
## 3 fatma 150 59
## İsim ID
## 1 ali 1
## 2 ayse 2
## 3 fatma 3