Bölüm 5 Veri Yapılarıyla İşlemler
5.1 Vektörlerde İşlemler
Bir vektörün uzunluğunu (kaç elemandan oluştuğunu) öğrenmek için length()
; türünü öğrenmek için ise class()
, mode()
ya da typeof()
fonksiyonları kullanılabilir.
# altı elemanlı karakter tipinde bir vektör oluşturma
meyveler <- c("elma", "çilek", "erik", "armut", "karpuz", "kiraz")
length(meyveler)
## [1] 6
## [1] "character"
## [1] "character"
## [1] "character"
Vektör oluşturulurken kullanılan klasik atama operatörleri haricinde assign()
fonksiyonu ile de vektör oluşturulabilir.
## [1] 1 2 3 4 5
Bir vektörden belirli bir eleman seçmek için köşeli parantez []
kullanılır. Vektörden birkaç eleman birlikte de seçilebilir.
meyveler <- c("elma", "çilek", "erik", "armut", "karpuz", "kiraz")
# vektörün içinden yalnızca bir eleman seçme
meyveler[4]
## [1] "armut"
## [1] "erik" "armut"
## [1] "çilek" "erik" "armut" "karpuz"
Vektörün bir elemanı değiştirilmek istendiğinde de yine köşeli parantez ile eleman ifade edilir ve yeni değer atanır.
## [1] "elma" "çilek" "erik" "muz" "karpuz" "kiraz"
Bir vektördeki bazı elemanlar -
operatörü ile işlemler dışında tutulabilir.
## [1] "elma" "çilek" "armut" "karpuz" "kiraz"
## [1] "elma" "çilek" "armut" "kiraz"
## [1] "karpuz" "kiraz"
Vektörlere eleman ekleme işlemi <-
atama operatörü yardımı ile yapılabilir.
## [1] "elma" "çilek" "erik" "armut" "karpuz" "kiraz" "kivi"
Vektörlerdeki elemanlara isim atanabilir.
meyveler <- c("elma", "çilek", "erik", "armut", "karpuz", "kiraz")
harf <- LETTERS[1:6]
names(meyveler) <- harf
meyveler
## A B C D E F
## "elma" "çilek" "erik" "armut" "karpuz" "kiraz"
İsim ataması yapılan nesneler isimleri ile çağırılabilir.
## C
## "erik"
## C
## "erik"
Bir vektördeki elemanlar belirlenen bir koşula göre de seçilebilir.
notlar <- c(70, 75, 65, 60, 35, 80, 80, 85, 90, 95, 80, 75, 60, 55)
ogrenciler <- c("Ogr01", "Ogr02", "Ogr03", "Ogr04", "Ogr05", "Ogr06", "Ogr07", "Ogr08",
"Ogr09", "Ogr10", "Ogr11", "Ogr12", "Ogr13", "Ogr14")
names(notlar) <- ogrenciler
notlar
## Ogr01 Ogr02 Ogr03 Ogr04 Ogr05 Ogr06 Ogr07 Ogr08 Ogr09 Ogr10 Ogr11 Ogr12 Ogr13
## 70 75 65 60 35 80 80 85 90 95 80 75 60
## Ogr14
## 55
## Ogr01 Ogr02 Ogr03 Ogr04 Ogr05 Ogr06 Ogr07 Ogr08 Ogr09 Ogr10 Ogr11 Ogr12 Ogr13
## FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
## Ogr14
## TRUE
# notu 70'ten düşük olan öğrencilerin listelenerek bir nesneye atanması
telafiOgrenci <- notlar[notlar < 70]
telafiOgrenci
## Ogr03 Ogr04 Ogr05 Ogr13 Ogr14
## 65 60 35 60 55
# notu ortalamadan yüksek olan öğrencilerin listelenerek bir nesneye atanması
ortalamadanYuksekOgrenci <- notlar[notlar > mean(notlar)]
ortalamadanYuksekOgrenci
## Ogr02 Ogr06 Ogr07 Ogr08 Ogr09 Ogr10 Ogr11 Ogr12
## 75 80 80 85 90 95 80 75
# notu tam olarak 80'e eşit olan öğrenciler kimlerdir? (Vektörün hangi elemanlarıdır?)
which(notlar == 80)
## Ogr06 Ogr07 Ogr11
## 6 7 11
R’da vektörler ile çalışılırken temel fonksiyonlardan yararlanılarak kolayca işlemler yapılabilir.
boy <- c(175, 173, 170, 175, 188, 202, 168, 165, 155, 151, 168, 180, 170)
# boy uzunluklarının toplanması
sum(boy)
## [1] 2240
## [1] 1.140809e+29
## [1] 151 155 165 168 168 170 170 173 175 175 180 188 202
## [1] 151 155 165 168 168 170 170 173 175 175 180 188 202
## [1] 202 188 180 175 175 173 170 170 168 168 165 155 151
## [1] 170 180 168 151 155 165 168 202 188 175 170 173 175
# ortalama, ortanca, minimum değer, maksimum değer, ranj, standart sapma bulma
mean(boy); median(boy); min(boy); max(boy); range(boy); sd(boy)
## [1] 172.3077
## [1] 170
## [1] 151
## [1] 202
## [1] 151 202
## [1] 13.09188
## [1] 6
## [1] 10
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 151.0 168.0 170.0 172.3 175.0 202.0
Vektör oluşturmanın çeşitli yolları vardır.
# c() fonksiyonu ile vektör oluşturma
boy <- c(175, 173, 170, 175, 188, 202, 168, 165, 155, 151, 168, 180, 170)
boy
## [1] 175 173 170 175 188 202 168 165 155 151 168 180 170
## [1] 0 1 2 3 4 5 6 7 8 9
# assign() fonksiyonu ile vektör oluşturma
assign("boy", c(175, 173, 170, 175, 188, 202, 168, 165, 155, 151, 168, 180, 170))
# 1'den 15'e kadar birer birer artan sayılar ile dizi oluşturulması
seq(from = 1, to = 15, by = 1)
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [1] 5.0 7.5 10.0 12.5 15.0
# length.out argümanı ile belirli bir aralıkta kaç adet değer bulunacağının ayarlanması
seq(from = 3, to = 7, length.out = 15)
## [1] 3.000000 3.285714 3.571429 3.857143 4.142857 4.428571 4.714286 5.000000
## [9] 5.285714 5.571429 5.857143 6.142857 6.428571 6.714286 7.000000
# belirli sayıdaki elemandan oluşan bir vektörün rep() fonksiyonu ile tekrar ettirilmesi
rep(c(0:9), 2)
## [1] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
## [1] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
# belirli sayıdaki elemandan oluşan bir vektörün rep() fonksiyonu ile sırayla tekrar ettirilmesi
rep(c(0:9), each = 2, times = 2)
## [1] 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8
## [39] 9 9
# bir vektörün elemanlarının sırayla istendiği kadar tekrar ettirilmesi
rep(c(1:5), c(1, 2, 3, 4, 5))
## [1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
Vektörlerde aritmetik işlemler yapılabilir.
## [1] 4 7 11 15 21 25 31 39
## [1] 0 1 1 1 -1 -1 -3 -7
## [1] 4 12 30 56 110 156 238 368
## [1] 1.0000000 1.3333333 1.2000000 1.1428571 0.9090909 0.9230769 0.8235294
## [8] 0.6956522
## [1] 4.000000e+00 8.100000e+01 1.562500e+04 5.764801e+06 2.593742e+10
## [6] 2.329809e+13 1.683778e+17 6.132610e+21
## [1] 1.414214 1.732051 2.236068 2.645751 3.316625 3.605551 4.123106 4.795832
## [1] 6.00000 10.69694 25.62278 44.38320 93.18915 120.57451 184.25236
## [8] 295.98718
# eleman sayıları eşit olmayan iki vektörün çarpımını inceleyeniz.
vektor3 <- c(1, 2, 3, 4)
vektor4 <- c(5, 6)
vektor3*vektor4
## [1] 5 12 15 24
## Warning in vektor5 * vektor6: uzun olan nesne uzunluğu kısa olan nesne
## uzunluğunun bir katı değil
## [1] 4 10 12
vektor3
ve vektor4
’ün sorunsuz çarpılmış olmasının nedeni, vektor4
’ün eleman sayısının vektor3
’ün eleman sayısının tam katı olmasıdır. vektor5
ile vektor6
da çarpılabilmiştir, ancak yazılım uyarı vermiştir.
5.2 Faktörlerde İşlemler
Faktörler, kategorik veriler (örneğin cinsiyet, doğum yeri, kan grupları gibi) için kullanılmaktadır. Faktör nesnelerinin aldığı değerlere düzey (level) denmektedir. Faktörler, karakterler ile karıştırılabilir. Ancak ikisi farklıdır. Faktör nesneleri sıklıkla kategorik verilerin analizinde kullanılmaktadır.
## [1] "character"
## [1] K K K E E K E K E
## Levels: E K
## [1] "factor"
## [1] "numeric"
## [1] 0 1 0 0 0 0 0 1 1 1 1 1 0 0 1
## Levels: 0 1
## [1] "factor"
Faktör düzeyleri sıralanmak istendiğinde ordered()
fonksiyonundan faydalanılır.
finalNotlari <- c("AA", "BB", "BA", "AA", "CC", "CC", "BA", "BB", "CB", "AA", "BA", "BB")
finalNotlari <- factor(finalNotlari)
finalNotlari
## [1] AA BB BA AA CC CC BA BB CB AA BA BB
## Levels: AA BA BB CB CC
## [1] AA BB BA AA CC CC BA BB CB AA BA BB
## Levels: CC < CB < BB < BA < AA
5.3 Matrislerde İşlemler
Vektörler tek boyutlu veri yapıları iken, matrisler ve veri setleri iki boyutludur. Matrisler, vektörler gibi yalnızca tek tür veri içerebilirler. R’da matris oluşturmanın birden fazla yolu vardır. Örneğin uzunlukları aynı olan vektörler birleştirilerek matris elde edilebilir. Sütunların birleştirilmesi için cbind()
, satırların birleştirilmesi için ise rbind()
fonksiyonları kullanılır.
motivasyon_puani <- c(90, 80, 80, 80, 70, 40, 70, 50, 90, 80)
maas <- c(40000, 40000, 30000, 35000, 20000, 12000, 18000, 25000, 50000, 30000)
# sütun ekleme
matris1 <- cbind(motivasyon_puani, maas)
matris1
## motivasyon_puani maas
## [1,] 90 40000
## [2,] 80 40000
## [3,] 80 30000
## [4,] 80 35000
## [5,] 70 20000
## [6,] 40 12000
## [7,] 70 18000
## [8,] 50 25000
## [9,] 90 50000
## [10,] 80 30000
## [1] "matrix" "array"
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## motivasyon_puani 90 80 80 80 70 40 70 50 90 80
## maas 40000 40000 30000 35000 20000 12000 18000 25000 50000 30000
## [1] "matrix" "array"
Oluşturulması istenen bir matrisin boyutları yazılıma verilerek kolaylıkla matris oluşturulabilir. Bunun için matrix()
fonksiyonu kullanılır.
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 2 3 4 5 6
## [2,] 7 8 9 10 11 12
## [3,] 13 14 15 16 17 18
## [4,] 19 20 21 22 23 24
## [5,] 25 26 27 28 29 30
## [1] TRUE
## [1] FALSE
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
Matrislere cbind()
ve rbind()
fonksiyonları ile eleman eklenebilir.
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 1 6 11 16 21 26 100
## [2,] 2 7 12 17 22 27 101
## [3,] 3 8 13 18 23 28 102
## [4,] 4 9 14 19 24 29 103
## [5,] 5 10 15 20 25 30 104
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
## [6,] 100 101 102 103 104 105
Bir matrisin satır ve sütun sayılarını görüntülemek için dim()
fonksiyonundan yararlanılabilir.
## [1] 5 6
colnames()
ve rownames()
fonksiyonları ile matrisin sütunlarına ve satırlarına isim verilebilir.
## B1 B2 B3 B4 B5 B6
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
## B1 B2 B3 B4 B5 B6
## A1 1 6 11 16 21 26
## A2 2 7 12 17 22 27
## A3 3 8 13 18 23 28
## A4 4 9 14 19 24 29
## A5 5 10 15 20 25 30
# sütun ve satırlara isim verme (paste() fonksiyonundan yararlanarak)
colnames(matris8) <- paste("A", c(1:6), sep = "")
matris8
## A1 A2 A3 A4 A5 A6
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 3 8 13 18 23 28
## [4,] 4 9 14 19 24 29
## [5,] 5 10 15 20 25 30
## A1 A2 A3 A4 A5 A6
## B1 1 6 11 16 21 26
## B2 2 7 12 17 22 27
## B3 3 8 13 18 23 28
## B4 4 9 14 19 24 29
## B5 5 10 15 20 25 30
Bir matristen eleman seçme işlemi []
operatörünün içine önce satır, sonra sütun numarası yazılarak yapılmaktadır. Satır ve sütun numarasının arasında virgül (,
) bulunmalıdır. Bunun haricinde bir matrisin yalnızca satırlarındaki ya da sütunlarındaki elemanlar da seçilebilir.
## B1 B2 B3 B4 B5 B6
## A1 1 6 11 16 21 26
## A2 2 7 12 17 22 27
## A3 3 8 13 18 23 28
## A4 4 9 14 19 24 29
## A5 5 10 15 20 25 30
## [1] 11
## B1 B2 B3 B4 B5 B6
## 2 7 12 17 22 27
## A1 A2 A3 A4 A5
## 11 12 13 14 15
## A1 A2 A3 A4 A5
## 11 12 13 14 15
## [1] TRUE
## A1 A2 A3 A4
## 6 7 8 9
## A1 A5
## 6 10
## B1 B2 B4
## 3 8 18
## A2 A3 A5
## 17 18 20
## B1 B2 B3 B4 B5 B6
## A2 2 7 12 17 22 27
## A3 3 8 13 18 23 28
## A4 4 9 14 19 24 29
## A5 5 10 15 20 25 30
## B1 B2 B3 B4 B5 B6
## A2 2 7 12 17 22 27
## A3 3 8 13 18 23 28
## A4 4 9 14 19 24 29
## A5 5 10 15 20 25 30
## A3 A4 A5
## 8 9 10
Matrislerde aritmetik işlemler yapılabilir.
## B1 B2 B3 B4 B5 B6
## A1 1 6 11 16 21 26
## A2 2 7 12 17 22 27
## A3 3 8 13 18 23 28
## A4 4 9 14 19 24 29
## A5 5 10 15 20 25 30
## B1 B2 B3 B4 B5 B6
## A1 6 11 16 21 26 31
## A2 7 12 17 22 27 32
## A3 8 13 18 23 28 33
## A4 9 14 19 24 29 34
## A5 10 15 20 25 30 35
## B1 B2 B3 B4 B5 B6
## A1 0 -5 -10 -15 -20 -25
## A2 -1 -6 -11 -16 -21 -26
## A3 -2 -7 -12 -17 -22 -27
## A4 -3 -8 -13 -18 -23 -28
## A5 -4 -9 -14 -19 -24 -29
## B1 B2 B3 B4 B5 B6
## A1 3 18 33 48 63 78
## A2 6 21 36 51 66 81
## A3 9 24 39 54 69 84
## A4 12 27 42 57 72 87
## A5 15 30 45 60 75 90
## B1 B2 B3 B4 B5 B6
## A1 1.000000 2.449490 3.316625 4.000000 4.582576 5.099020
## A2 1.414214 2.645751 3.464102 4.123106 4.690416 5.196152
## A3 1.732051 2.828427 3.605551 4.242641 4.795832 5.291503
## A4 2.000000 3.000000 3.741657 4.358899 4.898979 5.385165
## A5 2.236068 3.162278 3.872983 4.472136 5.000000 5.477226
## B1 B2 B3 B4 B5 B6
## A1 1 36 55 64 63 52
## A2 4 7 72 85 88 81
## A3 9 16 13 108 115 112
## A4 16 27 28 19 144 145
## A5 25 40 45 40 25 180
# lineer cebir için matrislerin oluşturulması
m1 <- matrix(1:15, 3, 5)
m2 <- matrix(20:39, 5, 4)
# matrislerin çarpılması
m1 %*% m2
## [,1] [,2] [,3] [,4]
## [1,] 800 975 1150 1325
## [2,] 910 1110 1310 1510
## [3,] 1020 1245 1470 1695
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
## [5,] 13 14 15
## [,1] [,2] [,3]
## [1,] 335 370 405
## [2,] 370 410 450
## [3,] 405 450 495
Matrislerin satırları ya da sütunları hızlıca toplanabilir, ortalamaları alınabilir.
## [1] 6 15 24 33 42
## function (x, na.rm = FALSE, dims = 1L)
## {
## if (is.data.frame(x))
## x <- as.matrix(x)
## if (!is.array(x) || length(dn <- dim(x)) < 2L)
## stop("'x' must be an array of at least two dimensions")
## if (dims < 1L || dims > length(dn) - 1L)
## stop("invalid 'dims'")
## p <- prod(dn[-(id <- seq_len(dims))])
## dn <- dn[id]
## z <- if (is.complex(x))
## .Internal(rowSums(Re(x), prod(dn), p, na.rm)) + (0+1i) *
## .Internal(rowSums(Im(x), prod(dn), p, na.rm))
## else .Internal(rowSums(x, prod(dn), p, na.rm))
## if (length(dn) > 1L) {
## dim(z) <- dn
## dimnames(z) <- dimnames(x)[id]
## }
## else names(z) <- dimnames(x)[[1L]]
## z
## }
## <bytecode: 0x0000025bd2c20068>
## <environment: namespace:base>
## [1] 2 5 8 11 14
## [1] 7 8 9
5.4 Dizilerde İşlemler
Diziler (arrays), vektörlerin ve matrislerin genelleştirilmiş halidir. Tek tür veri içerebilirler. Dizi oluşturmada array()
fonksiyonundan yararlanılır.
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 48.86260 47.51854 49.19430 47.25473
## [2,] 48.92883 50.21234 51.39852 48.98803
## [3,] 50.40520 51.63431 50.14032 51.19757
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 49.56037 51.60184 49.31037 45.25129
## [2,] 49.76093 46.80057 48.42533 53.50794
## [3,] 50.21515 48.57636 49.88929 50.11851
##
## , , 3
##
## [,1] [,2] [,3] [,4]
## [1,] 47.35314 51.35369 51.47142 49.21607
## [2,] 50.60235 50.16362 51.11425 51.39895
## [3,] 49.49149 50.62062 53.70002 51.07231
##
## , , 4
##
## [,1] [,2] [,3] [,4]
## [1,] 47.30442 49.42320 51.80900 46.55332
## [2,] 51.56795 49.24507 53.07329 54.82968
## [3,] 51.34187 49.08108 49.59649 46.26901
##
## , , 5
##
## [,1] [,2] [,3] [,4]
## [1,] 49.26113 48.62304 47.56589 51.15994
## [2,] 47.02092 49.42993 49.20475 48.80294
## [3,] 48.93209 51.49718 51.65613 51.49293
Diziler içindeki satırlara ve sütunlara isim verilebilir.
# bir dizinin oluşturulması satır ve sütun isimleriyle oluşturulması
sütunAdlari <- c("C1", "C2", "C3", "C4")
satirAdlari <- c("S1", "S2", "S3")
matrisAdlari <- c("Matris1","Matris2", "Matris3", "Matris4", "Matris5")
dizi2 <- array(1:60, dim = c(3, 4, 5),
dimnames = list(satirAdlari, sütunAdlari, matrisAdlari))
dizi2
## , , Matris1
##
## C1 C2 C3 C4
## S1 1 4 7 10
## S2 2 5 8 11
## S3 3 6 9 12
##
## , , Matris2
##
## C1 C2 C3 C4
## S1 13 16 19 22
## S2 14 17 20 23
## S3 15 18 21 24
##
## , , Matris3
##
## C1 C2 C3 C4
## S1 25 28 31 34
## S2 26 29 32 35
## S3 27 30 33 36
##
## , , Matris4
##
## C1 C2 C3 C4
## S1 37 40 43 46
## S2 38 41 44 47
## S3 39 42 45 48
##
## , , Matris5
##
## C1 C2 C3 C4
## S1 49 52 55 58
## S2 50 53 56 59
## S3 51 54 57 60
Diziler içindeki elemanları seçmek için []
kullanılır.
## , , Matris1
##
## C1 C2 C3 C4
## S1 1 4 7 10
## S2 2 5 8 11
## S3 3 6 9 12
##
## , , Matris2
##
## C1 C2 C3 C4
## S1 13 16 19 22
## S2 14 17 20 23
## S3 15 18 21 24
##
## , , Matris3
##
## C1 C2 C3 C4
## S1 25 28 31 34
## S2 26 29 32 35
## S3 27 30 33 36
##
## , , Matris4
##
## C1 C2 C3 C4
## S1 37 40 43 46
## S2 38 41 44 47
## S3 39 42 45 48
##
## , , Matris5
##
## C1 C2 C3 C4
## S1 49 52 55 58
## S2 50 53 56 59
## S3 51 54 57 60
## Matris1 Matris2 Matris3 Matris4 Matris5
## C1 3 15 27 39 51
## C2 6 18 30 42 54
## C3 9 21 33 45 57
## C4 12 24 36 48 60
## C1 C2 C3 C4
## 15 18 21 24
## [1] 7
## C1 C2 C3 C4
## S1 13 16 19 22
## S2 14 17 20 23
## S3 15 18 21 24
Dizinin içindeki elemanlara yeni nesneler atanabilir.
## , , Matris1
##
## C1 C2 C3 C4
## S1 1 4 7 10
## S2 2 5 8 11
## S3 3 6 9 12
##
## , , Matris2
##
## C1 C2 C3 C4
## S1 13 16 19 22
## S2 14 17 20 23
## S3 15 18 21 24
##
## , , Matris3
##
## C1 C2 C3 C4
## S1 25 28 31 34
## S2 26 29 32 35
## S3 27 30 33 36
##
## , , Matris4
##
## C1 C2 C3 C4
## S1 37 40 43 46
## S2 38 41 44 47
## S3 39 42 45 48
##
## , , Matris5
##
## C1 C2 C3 C4
## S1 49 52 55 58
## S2 50 53 56 59
## S3 51 54 57 60
# dizi2'ye yeni eleman eklenmesi
dizi2[,,2] <- matrix(101:112, 3, 4)
# dizi2'nin yeni halinin incelenmesi
dizi2
## , , Matris1
##
## C1 C2 C3 C4
## S1 1 4 7 10
## S2 2 5 8 11
## S3 3 6 9 12
##
## , , Matris2
##
## C1 C2 C3 C4
## S1 101 104 107 110
## S2 102 105 108 111
## S3 103 106 109 112
##
## , , Matris3
##
## C1 C2 C3 C4
## S1 25 28 31 34
## S2 26 29 32 35
## S3 27 30 33 36
##
## , , Matris4
##
## C1 C2 C3 C4
## S1 37 40 43 46
## S2 38 41 44 47
## S3 39 42 45 48
##
## , , Matris5
##
## C1 C2 C3 C4
## S1 49 52 55 58
## S2 50 53 56 59
## S3 51 54 57 60
5.5 Listelerde İşlemler
Listeler çok esnek bir veri yapısıdır. Listelerde farklı türlerde ve farklı uzunluklarda veri türleri bulunabilir. Listeler list()
fonksiyonu yardımıyla oluşturulurlar.
# karakterlerden ve sayılardan oluşan vektörlerin oluşturulması
personel <- c("Per01", "Per02", "Per03", "Per04", "Per05", "Per06", "Per07", "Per08",
"Per09", "Per10")
motivasyon_puani <- c(90, 80, 80, 80, 70, 40, 70, 50, 90, 80)
maas <- c(40000, 40000, 30000, 35000, 20000, 12000, 18000, 25000, 50000, 30000)
# listenin list() fonksiyonu ile oluşturulması
liste1 <- list(personel, motivasyon_puani, maas)
liste1
## [[1]]
## [1] "Per01" "Per02" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
##
## [[2]]
## [1] 90 80 80 80 70 40 70 50 90 80
##
## [[3]]
## [1] 40000 40000 30000 35000 20000 12000 18000 25000 50000 30000
Listenin içindeki verileri ve yapılarını görmek için str()
fonksiyonundan yararlanılabilir.
## List of 3
## $ : chr [1:10] "Per01" "Per02" "Per03" "Per04" ...
## $ : num [1:10] 90 80 80 80 70 40 70 50 90 80
## $ : num [1:10] 40000 40000 30000 35000 20000 12000 18000 25000 50000 30000
Listeler içlerinde başka listeler de barındırabilir.
# liste2 nesnesinin oluşturulması için iki ayrı vektörün oluşturulması
sayilar <- 1:10
mantik <- c(T, F, F)
liste2 <- list(sayilar, mantik)
# liste3'e eklenecek olan harfler isimli vektörün oluşturulması
harfler <- letters[1:20]
# liste3'ün oluşturulması
liste3 <- list(liste1, liste2, harfler)
liste3
## [[1]]
## [[1]][[1]]
## [1] "Per01" "Per02" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
##
## [[1]][[2]]
## [1] 90 80 80 80 70 40 70 50 90 80
##
## [[1]][[3]]
## [1] 40000 40000 30000 35000 20000 12000 18000 25000 50000 30000
##
##
## [[2]]
## [[2]][[1]]
## [1] 1 2 3 4 5 6 7 8 9 10
##
## [[2]][[2]]
## [1] TRUE FALSE FALSE
##
##
## [[3]]
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t"
Liste içindeki elemanlara isim verilebilir.
personel <- c("Per01", "Per02", "Per03", "Per04", "Per05", "Per06", "Per07", "Per08",
"Per09", "Per10")
motivasyon_puani <- c(90, 80, 80, 80, 70, 40, 70, 50, 90, 80)
maas <- c(40000, 40000, 30000, 35000, 20000, 12000, 18000, 25000, 50000, 30000)
liste_yeni <- list(Ad = personel, Motivasyon = motivasyon_puani, Ucret = maas)
liste_yeni
## $Ad
## [1] "Per01" "Per02" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
##
## $Motivasyon
## [1] 90 80 80 80 70 40 70 50 90 80
##
## $Ucret
## [1] 40000 40000 30000 35000 20000 12000 18000 25000 50000 30000
Listelerden [[]]
ve $
operatörleri ile eleman seçilebilir.
## [1] 90 80 80 80 70 40 70 50 90 80
## [1] 90
## [1] "Per01" "Per02" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
## [1] "Per02"
## [1] "Per02" "Per04"
## [1] "Per02" "Per03" "Per04"
## [1] "Per01" "Per11" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
Listenin içindeki elemanlarda düzenlemeler gerçekleştirilebilir.
## [1] "Per01" "Per11" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
personel <- c("Per01", "Per02", "Per03", "Per04", "Per05", "Per06", "Per07", "Per08",
"Per09", "Per10")
cinsiyet <- c("K", "E", "E", "E", "K", "K", "E", "E", "E", "K")
listeA <- list(personel, cinsiyet)
listeA
## [[1]]
## [1] "Per01" "Per02" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
##
## [[2]]
## [1] "K" "E" "E" "E" "K" "K" "E" "E" "E" "K"
## [[1]]
## [1] "Per01" "Per02" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
##
## [[2]]
## [1] "E" "E" "E" "E" "K" "K" "E" "E" "E" "K"
5.6 Data Frame’lerde İşlemler
Data frame sıklıkla karşılaşılan bir veri yapısıdır. Matrislere çok benzemekle birlikte, matrislerden farklı olarak data frame’lerde farklı sütunlarda farklı veri türleri yer alabilir.
## [1] "matrix" "array"
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] "1" "3" "5" "7" "9" "11"
## [2,] "2" "4" "6" "8" "10" "12"
## [3,] "elma" "çilek" "erik" "armut" "karpuz" "kiraz"
## chr [1:3, 1:6] "1" "2" "elma" "3" "4" "çilek" "5" "6" "erik" "7" "8" ...
Data frame’ler data.frame()
fonksiyonu ile oluşturulabilir.
id <- 1:14
notlar <- c(70, 75, 65, 60, 35, 80, 80, 85, 90, 95, 80, 75, 60, 55)
ogrenciler <- c("Ogr01", "Ogr02", "Ogr03", "Ogr04", "Ogr05", "Ogr06", "Ogr07", "Ogr08",
"Ogr09", "Ogr10", "Ogr11", "Ogr12", "Ogr13", "Ogr14")
data1 <- data.frame(id, notlar, ogrenciler)
data1
## id notlar ogrenciler
## 1 1 70 Ogr01
## 2 2 75 Ogr02
## 3 3 65 Ogr03
## 4 4 60 Ogr04
## 5 5 35 Ogr05
## 6 6 80 Ogr06
## 7 7 80 Ogr07
## 8 8 85 Ogr08
## 9 9 90 Ogr09
## 10 10 95 Ogr10
## 11 11 80 Ogr11
## 12 12 75 Ogr12
## 13 13 60 Ogr13
## 14 14 55 Ogr14
## [1] "data.frame"
Farklı uzunluklardaki vektörler ile veri setleri oluşturulabilir. Ancak bu noktada uzun vektörün uzunluğunun diğer (kısa) vektörün uzunluğunun tam katı olması gerekir. Aksi halde hata mesajı alınacaktır.
## x y
## 1 100 10
## 2 101 10
## 3 102 10
## 4 103 10
## Error in data.frame(x, N): arguments imply differing number of rows: 4, 3
## Error in data.frame(M, N): arguments imply differing number of rows: 2, 3
Oluşturulan veri setleri edit()
fonksiyonu yardımıyla elle düzenlenebilir.
id <- 1:14
notlar <- c(70, 75, 65, 60, 35, 80, 80, 85, 90, 95, 80, 75, 60, 55)
ogrenciler <- c("Ogr01", "Ogr02", "Ogr03", "Ogr04", "Ogr05", "Ogr06", "Ogr07", "Ogr08",
"Ogr09", "Ogr10", "Ogr11", "Ogr12", "Ogr13", "Ogr14")
data1 <- data.frame(id, notlar, ogrenciler)
Yukarıdaki kodlar çalıştırıldıktan sonra edit(data1)
komutu çalıştırıldığında bir veri düzenleme penceresi açılacaktır.
Bir data frame’den eleman seçme işlemi []
operatörünün içine önce satır, sonra sütun numarası yazılarak yapılmaktadır (Değişken adını girerek de eleman seçimi yapılabilir). Satır ve sütun numarasının arasında virgül (,
) bulunmalıdır. Bunun haricinde bir data frame’in yalnızca satırlarındaki ya da sütunlarındaki elemanlar da seçilebilir. Bu işlem matrislerdekinin aynısıdır.
id <- 1:14
notlar <- c(70, 75, 65, 60, 35, 80, 80, 85, 90, 95, 80, 75, 60, 55)
ogrenciler <- c("Ogr01", "Ogr02", "Ogr03", "Ogr04", "Ogr05", "Ogr06", "Ogr07", "Ogr08",
"Ogr09", "Ogr10", "Ogr11", "Ogr12", "Ogr13", "Ogr14")
data1 <- data.frame(id, notlar, ogrenciler)
data1[1, 3]
## [1] "Ogr01"
## id notlar ogrenciler
## 2 2 75 Ogr02
## [1] "Ogr01" "Ogr02" "Ogr03" "Ogr04" "Ogr05" "Ogr06" "Ogr07" "Ogr08" "Ogr09"
## [10] "Ogr10" "Ogr11" "Ogr12" "Ogr13" "Ogr14"
Veri setlerinde satır elemanlarının seçimi ile sütun elemanlarının seçimi benzer şekilde yapılmasına karşın, elde edilen nesnelerin türleri farklılık göstermektedir.
## [1] TRUE
## [1] FALSE
## ogrenciler
## 1 Ogr01
## 2 Ogr02
## 3 Ogr03
## 4 Ogr04
## 5 Ogr05
## 6 Ogr06
## 7 Ogr07
## 8 Ogr08
## 9 Ogr09
## 10 Ogr10
## 11 Ogr11
## 12 Ogr12
## 13 Ogr13
## 14 Ogr14
## [1] TRUE
Data frame’den eleman seçimi gerçekleştirilirken mantıksal operatörler de kullanılabilir.
## id notlar ogrenciler
## 6 6 80 Ogr06
## 7 7 80 Ogr07
## 8 8 85 Ogr08
## 9 9 90 Ogr09
## 10 10 95 Ogr10
## 11 11 80 Ogr11
# notu 75'ten yüksek olan ve adı Eren olan öğrencilerin seçilmesi
data1[data1[2] > 75 & data1[3] == "Ogr06", ]
## id notlar ogrenciler
## 6 6 80 Ogr06
Köşeli parantez kullanmadan subset()
fonksiyonu yardımıyla da veri setlerinden eleman seçimi yapılabilir.
## id notlar ogrenciler
## 6 6 80 Ogr06
## id notlar ogrenciler
## 6 6 80 Ogr06
## 7 7 80 Ogr07
## 8 8 85 Ogr08
## 9 9 90 Ogr09
## 10 10 95 Ogr10
## 11 11 80 Ogr11
Veri setlerine yeni elemanlar eklenebilir.
# $ sembolünü kullanarak atama yapmak
data1$gpa <- c(3.0, 3.3, 3.2, 4.0, 2.8, 3.3, 3.5, 3.4, 3.5, 3.1, 3.2, 2.9, 3.8, 3.3)
# [[]] kullanarak atama yapmak
data1[["gpa2"]] <- c(3.0, 3.3, 3.2, 4.0, 2.8, 3.3, 3.5, 3.4, 3.5, 3.1, 3.2, 2.9, 3.8, 3.3)
# cbind() fonksiyonu ile atama yapmak
yilsonu <- c(3.0, 3.3, 3.2, 4.0, 2.8, 3.3, 3.5, 3.4, 3.5, 3.1, 3.2, 2.9, 3.8, 3.3)
data1 <- cbind(data1, gpa3 = yilsonu)
data1
## id notlar ogrenciler gpa gpa2 gpa3
## 1 1 70 Ogr01 3.0 3.0 3.0
## 2 2 75 Ogr02 3.3 3.3 3.3
## 3 3 65 Ogr03 3.2 3.2 3.2
## 4 4 60 Ogr04 4.0 4.0 4.0
## 5 5 35 Ogr05 2.8 2.8 2.8
## 6 6 80 Ogr06 3.3 3.3 3.3
## 7 7 80 Ogr07 3.5 3.5 3.5
## 8 8 85 Ogr08 3.4 3.4 3.4
## 9 9 90 Ogr09 3.5 3.5 3.5
## 10 10 95 Ogr10 3.1 3.1 3.1
## 11 11 80 Ogr11 3.2 3.2 3.2
## 12 12 75 Ogr12 2.9 2.9 2.9
## 13 13 60 Ogr13 3.8 3.8 3.8
## 14 14 55 Ogr14 3.3 3.3 3.3
Veri setlerinin yapısı str()
fonksiyonu ile incelenebilir.
## 'data.frame': 14 obs. of 6 variables:
## $ id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ notlar : num 70 75 65 60 35 80 80 85 90 95 ...
## $ ogrenciler: chr "Ogr01" "Ogr02" "Ogr03" "Ogr04" ...
## $ gpa : num 3 3.3 3.2 4 2.8 3.3 3.5 3.4 3.5 3.1 ...
## $ gpa2 : num 3 3.3 3.2 4 2.8 3.3 3.5 3.4 3.5 3.1 ...
## $ gpa3 : num 3 3.3 3.2 4 2.8 3.3 3.5 3.4 3.5 3.1 ...
names()
ya da colnames()
fonksiyonları ile bir data frame’deki değişkenlere isim verilebilir.
## id notlar ogrenciler gpa gpa2 gpa3
## 1 1 70 Ogr01 3.0 3.0 3.0
## 2 2 75 Ogr02 3.3 3.3 3.3
## 3 3 65 Ogr03 3.2 3.2 3.2
## 4 4 60 Ogr04 4.0 4.0 4.0
## 5 5 35 Ogr05 2.8 2.8 2.8
## 6 6 80 Ogr06 3.3 3.3 3.3
## 7 7 80 Ogr07 3.5 3.5 3.5
## 8 8 85 Ogr08 3.4 3.4 3.4
## 9 9 90 Ogr09 3.5 3.5 3.5
## 10 10 95 Ogr10 3.1 3.1 3.1
## 11 11 80 Ogr11 3.2 3.2 3.2
## 12 12 75 Ogr12 2.9 2.9 2.9
## 13 13 60 Ogr13 3.8 3.8 3.8
## 14 14 55 Ogr14 3.3 3.3 3.3
## No Sınav Notu Ad Soyad GPA1 GPA2 GPA3
## 1 1 70 Ogr01 3.0 3.0 3.0
## 2 2 75 Ogr02 3.3 3.3 3.3
## 3 3 65 Ogr03 3.2 3.2 3.2
## 4 4 60 Ogr04 4.0 4.0 4.0
## 5 5 35 Ogr05 2.8 2.8 2.8
## 6 6 80 Ogr06 3.3 3.3 3.3
## 7 7 80 Ogr07 3.5 3.5 3.5
## 8 8 85 Ogr08 3.4 3.4 3.4
## 9 9 90 Ogr09 3.5 3.5 3.5
## 10 10 95 Ogr10 3.1 3.1 3.1
## 11 11 80 Ogr11 3.2 3.2 3.2
## 12 12 75 Ogr12 2.9 2.9 2.9
## 13 13 60 Ogr13 3.8 3.8 3.8
## 14 14 55 Ogr14 3.3 3.3 3.3
## Numara Not İsim GPA1 GPA2 GPA3
## 1 1 70 Ogr01 3.0 3.0 3.0
## 2 2 75 Ogr02 3.3 3.3 3.3
## 3 3 65 Ogr03 3.2 3.2 3.2
## 4 4 60 Ogr04 4.0 4.0 4.0
## 5 5 35 Ogr05 2.8 2.8 2.8
## 6 6 80 Ogr06 3.3 3.3 3.3
## 7 7 80 Ogr07 3.5 3.5 3.5
## 8 8 85 Ogr08 3.4 3.4 3.4
## 9 9 90 Ogr09 3.5 3.5 3.5
## 10 10 95 Ogr10 3.1 3.1 3.1
## 11 11 80 Ogr11 3.2 3.2 3.2
## 12 12 75 Ogr12 2.9 2.9 2.9
## 13 13 60 Ogr13 3.8 3.8 3.8
## 14 14 55 Ogr14 3.3 3.3 3.3
R’da hazır veri setleri ile çalışma
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
## [1] 150 5
## $names
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
##
## $class
## [1] "data.frame"
##
## $row.names
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
## [109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
## [127] 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
## [145] 145 146 147 148 149 150
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
##
## FALSE
## 750
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 42 4.5 2.3 1.3 0.3 setosa
## 54 5.5 2.3 4.0 1.3 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 107 4.9 2.5 4.5 1.7 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 55 6.5 2.8 4.6 1.5 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 102 5.8 2.7 5.1 1.9 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 9 4.4 2.9 1.4 0.2 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
## [1] "setosa" "setosa" "setosa" "setosa" "setosa"
## [6] "setosa" "setosa" "setosa" "setosa" "setosa"
## [11] "setosa" "setosa" "setosa" "setosa" "setosa"
## [16] "setosa" "setosa" "setosa" "setosa" "setosa"
## [21] "setosa" "setosa" "setosa" "setosa" "setosa"
## [26] "setosa" "setosa" "setosa" "setosa" "setosa"
## [31] "setosa" "setosa" "setosa" "setosa" "setosa"
## [36] "setosa" "setosa" "setosa" "setosa" "setosa"
## [41] "setosa" "setosa" "setosa" "setosa" "setosa"
## [46] "setosa" "setosa" "setosa" "setosa" "setosa"
## [51] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [56] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [61] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [66] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [71] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [76] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [81] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [86] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [91] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [96] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [101] "virginica" "virginica" "virginica" "virginica" "virginica"
## [106] "virginica" "virginica" "virginica" "virginica" "virginica"
## [111] "virginica" "virginica" "virginica" "virginica" "virginica"
## [116] "virginica" "virginica" "virginica" "virginica" "virginica"
## [121] "virginica" "virginica" "virginica" "virginica" "virginica"
## [126] "virginica" "virginica" "virginica" "virginica" "virginica"
## [131] "virginica" "virginica" "virginica" "virginica" "virginica"
## [136] "virginica" "virginica" "virginica" "virginica" "virginica"
## [141] "virginica" "virginica" "virginica" "virginica" "virginica"
## [146] "virginica" "virginica" "virginica" "virginica" "virginica"
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species new
## 1 5.1 3.5 1.4 0.2 setosa 8.996
## 2 4.9 3.0 1.4 0.2 setosa 8.604
## 3 4.7 3.2 1.3 0.2 setosa 6.943
## 4 4.6 3.1 1.5 0.2 setosa 9.350
## 5 5.0 3.6 1.4 0.2 setosa 8.800
## 6 5.4 3.9 1.7 0.4 setosa 14.606
## 7 4.6 3.4 1.4 0.3 setosa 8.016
## 8 5.0 3.4 1.5 0.2 setosa 10.250
## 9 4.4 2.9 1.4 0.2 setosa 7.624
## 10 4.9 3.1 1.5 0.1 setosa 10.025
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
## mpg cyl disp hp drat wt qsec vs am gear carb
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2
## [1] 32 11
## $names
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
##
## $row.names
## [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710"
## [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant"
## [7] "Duster 360" "Merc 240D" "Merc 230"
## [10] "Merc 280" "Merc 280C" "Merc 450SE"
## [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood"
## [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128"
## [19] "Honda Civic" "Toyota Corolla" "Toyota Corona"
## [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28"
## [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2"
## [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino"
## [31] "Maserati Bora" "Volvo 142E"
##
## $class
## [1] "data.frame"
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
##
## FALSE
## 352
Veri yapıları birbirine dönüştürülebilir.
Bazen veri yapılarının birbirine dönüştürülmesi gerekebilir. Örneğin, bilgisayardaki bir Excel dosyası R’a okutturulduğunda genellikle bir data frame elde edilir. Ancak bu data frame aslında yalnızca sayısal karakterler içeren bir matristir ve matrislerde aritmetik işlemler gerçekleştirilmesi gerekiyordur. Bu nedenle data frame’in öncelikle matrise çevrilmesi gerekir. Bunun için as.matrix()
fonksiyonu kullanılır.
vektorK <- c(1, 2, 3, 4)
vektorL <- 10:13
vektorM <- seq(from = 100, to = 200, length.out = 4)
dataKLM <- data.frame(vektorK, vektorL, vektorM)
dataKLM
## vektorK vektorL vektorM
## 1 1 10 100.0000
## 2 2 11 133.3333
## 3 3 12 166.6667
## 4 4 13 200.0000
## [1] "data.frame"
## [1] "matrix" "array"
Bir data frame as.list()
fonksiyonu ile listeye dönüştürülebilir.
vektorK <- c(1, 2, 3, 4)
vektorL <- 10:13
vektorM <- seq(from = 100, to = 200, length.out = 4)
dataKLM <- data.frame(vektorK, vektorL, vektorM)
dataKLM
## vektorK vektorL vektorM
## 1 1 10 100.0000
## 2 2 11 133.3333
## 3 3 12 166.6667
## 4 4 13 200.0000
## [1] "data.frame"
## [1] "list"
Bir matris as.vector()
fonksiyonu ile vektöre dönüştürülebilir.
## [,1] [,2] [,3] [,4]
## [1,] 101 104 107 110
## [2,] 102 105 108 111
## [3,] 103 106 109 112
## [1] 101 102 103 104 105 106 107 108 109 110 111 112
## [1] "integer"
Vektörler, matrisler ve listeler as.data.frame()
fonksiyonu ile data frame’e dönüştürülebilir.
## [1] "character"
## [1] "data.frame"
## [1] "matrix" "array"
## [1] "data.frame"
# listenin data frame'e dönüştürülmesi
personel <- c("Per01", "Per02", "Per03", "Per04", "Per05", "Per06", "Per07", "Per08",
"Per09", "Per10")
motivasyon_puani <- c(90, 80, 80, 80, 70, 40, 70, 50, 90, 80)
maas <- c(40000, 40000, 30000, 35000, 20000, 12000, 18000, 25000, 50000, 30000)
liste_yeni <- list(Ad = personel, Motivasyon = motivasyon_puani, Ucret = maas)
class(liste_yeni)
## [1] "list"
## [1] "data.frame"
5.7 Alıştırmalar
Alıştırma 1
ABCDE <- c("A", "B", "C", "D")
komutunu çalıştırarak ABCDE
nesnesini oluşturunuz. Ardından bu vektöre beşinci eleman olarak “E” harfini ekleyiniz.
Yanıt İçin Tıklayınız
## [1] "A" "B" "C" "D" "E"
Alıştırma 2 Beş farklı sayısal değerden oluşan bir vektör oluşturunuz. Ardından bu vektördeki değerleri büyükten küçüğe doğru sıralayan bir fonksiyon yardımıyla sıralı değerlerden oluşan yeni bir vektör elde ediniz.
Yanıt İçin Tıklayınız
Alıştırma 3
5 satırlı 6 sütunlu matris_yeni
isimli bir matris oluşturunuz. Bu matrisin üçüncü satırındaki değerler haricindeki değerlerden oluşan halini yazdırınız.
Yanıt İçin Tıklayınız
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 2 7 12 17 22 27
## [3,] 4 9 14 19 24 29
## [4,] 5 10 15 20 25 30
Alıştırma 4 Dört elemanlı bir karakter vektörü, bir de nümerik vektör oluşturunuz. Bu iki vektörden oluşan bir data frame oluşturunuz.
Yanıt İçin Tıklayınız
dortHarf <- c("M", "T", "H", "N")
dortSayi <- c(1, 2, 0, 6)
dortHarfSayi <- data.frame(dortHarf, dortSayi)
dortHarfSayi
## dortHarf dortSayi
## 1 M 1
## 2 T 2
## 3 H 0
## 4 N 6
Alıştırma 5
data(iris)
komutunu çalıştırdıktan sonra iris
veri setindeki türü (Species) “setosa” olan çiçeklerin Petal.Length
değerlerinin aritmetik ortalamasını bulunuz.
Yanıt İçin Tıklayınız
## [1] 1.462
Alıştırma 6
matris_alistirma <- matrix(91:102, 3, 4)
komutunu çalıştırarak bir matris oluşturunuz. Ardından bu matrisi data frame’e dönüştürünüz. Nesnenin data frame’e dönüşüp dönüşmediğini kontrol ediniz.