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
class(meyveler)
## [1] "character"
mode(meyveler)
## [1] "character"
typeof(meyveler)
## [1] "character"

Vektör oluşturulurken kullanılan klasik atama operatörleri haricinde assign() fonksiyonu ile de vektör oluşturulabilir.

assign("yeni_sayilar", c(1, 2, 3, 4, 5))
yeni_sayilar
## [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"
# vektörün içinden birden fazla eleman seçme
meyveler[c(3, 4)]
## [1] "erik"  "armut"
meyveler[c(2:5)]
## [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.

meyveler <- c("elma", "çilek", "erik", "armut", "karpuz", "kiraz")
meyveler[4] <- "muz"
meyveler
## [1] "elma"   "çilek"  "erik"   "muz"    "karpuz" "kiraz"

Bir vektördeki bazı elemanlar - operatörü ile işlemler dışında tutulabilir.

meyveler <- c("elma", "çilek", "erik", "armut", "karpuz", "kiraz")
meyveler[-3]
## [1] "elma"   "çilek"  "armut"  "karpuz" "kiraz"
meyveler[-c(3, 5)]
## [1] "elma"  "çilek" "armut" "kiraz"
meyveler[-c(1:4)]
## [1] "karpuz" "kiraz"

Vektörlere eleman ekleme işlemi <- atama operatörü yardımı ile yapılabilir.

meyveler <- c("elma", "çilek", "erik", "armut", "karpuz", "kiraz")
meyveler[7] <- "kivi"
meyveler
## [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.

meyveler[3]
##      C 
## "erik"
meyveler["C"]
##      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
# notu 70'ten düşük olan öğrencilerin listelenmesi (mantıksal değerler verir)
notlar < 70
## 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
# boy uzunluklarının çarpılması
prod(boy)
## [1] 1.140809e+29
# boy uzunluklarının küçükten büyüğe sıralanması (Olağan argüman decreasing = F)
sort(boy)
##  [1] 151 155 165 168 168 170 170 173 175 175 180 188 202
sort(boy, decreasing = F)
##  [1] 151 155 165 168 168 170 170 173 175 175 180 188 202
# boy uzunluklarının büyükten küçüğe sıralanması
sort(boy, decreasing = T)
##  [1] 202 188 180 175 175 173 170 170 168 168 165 155 151
# boy uzunluklarının sırasının tersine çevrilmesi
rev(boy)
##  [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
# en büyük ve en küçük değerinin kaçıncı değerler olduğunu bulma
which.max(boy); which.min(boy)
## [1] 6
## [1] 10
# özet betimsel istatistiklere ulaşma
summary(boy)
##    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
# : işaretini kullanarak vektör oluşturma
rakamlar <- 0:9
rakamlar
##  [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
seq(1, 15, 1)
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
# length argümanı ile belirli uzunlukta dizi oluşturma
seq(from = 10, length = 16)
##  [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
# by argümanı ile artış miktarının ayarlanması
seq(from = 5, to = 15, by = 2.5)
## [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
rep(c(0:9), times = 2)
##  [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.

vektor1 <- c(2, 3, 5, 7, 11, 13, 17, 23)
vektor2 <- c(2, 4, 6, 8, 10, 12, 14, 16)

vektor1 + vektor2
## [1]  4  7 11 15 21 25 31 39
vektor2 - vektor1
## [1]  0  1  1  1 -1 -1 -3 -7
vektor1*vektor2
## [1]   4  12  30  56 110 156 238 368
vektor2/vektor1
## [1] 1.0000000 1.3333333 1.2000000 1.1428571 0.9090909 0.9230769 0.8235294
## [8] 0.6956522
vektor1^vektor2
## [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
sqrt(vektor1)
## [1] 1.414214 1.732051 2.236068 2.645751 3.316625 3.605551 4.123106 4.795832
sqrt((vektor1*2)^3) - vektor2
## [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
vektor5 <- c(1, 2, 3)
vektor6 <- c(4, 5)
vektor5*vektor6
## 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.

cinsiyet <- c("K", "K", "K", "E", "E", "K", "E", "K", "E")
class(cinsiyet)
## [1] "character"
cinsiyet <- factor(cinsiyet)
cinsiyet
## [1] K K K E E K E K E
## Levels: E K
class(cinsiyet)
## [1] "factor"
cinsiyet2 <- c(0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1)
class(cinsiyet2)
## [1] "numeric"
cinsiyet2 <- factor(cinsiyet2)
cinsiyet2
##  [1] 0 1 0 0 0 0 0 1 1 1 1 1 0 0 1
## Levels: 0 1
class(cinsiyet2)
## [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
finalNotlari <- ordered(finalNotlari, levels = c("CC", "CB", "BB", "BA", "AA"))
finalNotlari
##  [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
class(matris1)
## [1] "matrix" "array"
# satır ekleme
matris2 <- rbind(motivasyon_puani, maas)
matris2
##                   [,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
class(matris2)
## [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.

matris3 <- matrix(1:30, nrow = 5, ncol = 6, byrow = FALSE)
matris3
##      [,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
matris4 <- matrix(1:30, nrow = 5, ncol = 6)
matris4
##      [,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
matris5 <- matrix(1:30, nrow = 5, ncol = 6, byrow = TRUE)
matris5
##      [,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
# matrislerin birebir aynı olup olmadığını test etme
identical(matris3, matris4)
## [1] TRUE
identical(matris4, matris5)
## [1] FALSE
# Ayrıca aşağıdaki matrisleri inceleyiniz.
matris6 <- matrix(1:30, 5)
matris6
##      [,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
matris7 <- matrix(1:30, 5, 6)
matris7
##      [,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
matris8 <- matrix(1:30, ncol = 6)
matris8
##      [,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.

matris8 <- matrix(1:30, ncol = 6)
matris8
##      [,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
# sütun ekleme
matris9 <- cbind(matris8, 100:104)
matris9
##      [,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
# satır ekleme
matris10 <- rbind(matris8, 100:105)
matris10
##      [,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.

dim(matris7)
## [1] 5 6

colnames() ve rownames() fonksiyonları ile matrisin sütunlarına ve satırlarına isim verilebilir.

# sütun ve satırlara isim verme
colnames(matris7) <- c("B1", "B2", "B3", "B4", "B5", "B6")
matris7
##      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
rownames(matris7) <- c("A1", "A2", "A3", "A4", "A5")
matris7
##    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
rownames(matris8) <- paste("B", c(1:5), sep = "")
matris8
##    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.

# matris7'yi örnek olarak ele alalım
matris7
##    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
# matris7'den farklı şekillerde eleman seçme
matris7[1, 3]
## [1] 11
matris7[2, ]
## B1 B2 B3 B4 B5 B6 
##  2  7 12 17 22 27
matris7[, 3]
## A1 A2 A3 A4 A5 
## 11 12 13 14 15
matris7[, "B3"]
## A1 A2 A3 A4 A5 
## 11 12 13 14 15
# iki vektörün aynı olup olmadığını test etme
identical(matris7[, 3], matris7[, "B3"])
## [1] TRUE
# matris7'den farklı şekillerde eleman seçme
matris7[1:4, 2]
## A1 A2 A3 A4 
##  6  7  8  9
matris7[c(1, 5), 2]
## A1 A5 
##  6 10
matris7[3, c(1, 2, 4)]
## B1 B2 B4 
##  3  8 18
matris7[-c(1, 4), 4]
## A2 A3 A5 
## 17 18 20
matris7[-c(1), ]
##    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
matris7[-1, ]
##    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
matris7[matris7[, 1] > 2, 2]
## A3 A4 A5 
##  8  9 10

Matrislerde aritmetik işlemler yapılabilir.

# matrisi inceleyelim
matris7
##    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
# matrise 5 eklenmesi
matris7 + 5
##    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
# 1'den bir matrisin çıkarılması
1 - matris7
##    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
# matrisin bir sabit ile çarpılması
3*matris7
##    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
# matrisin karekökünün alınması
sqrt(matris7)
##          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
# bir matris, bir vektör ile çarpılabilir
vektorA <- 1:6
matris7*vektorA
##    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
# matrisin devriğinin alınması
t(m1)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## [4,]   10   11   12
## [5,]   13   14   15
# matris ile devriğinin çarpılması
m1 %*% t(m1)
##      [,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.

# m1 matrisinin oluşturulması
m1 <- matrix(1:15, 3, 5)

# sütun toplamları
colSums(m1)
## [1]  6 15 24 33 42
# satır toplamları
rowSums
## 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>
# sütun ortalamaları
colMeans(m1)
## [1]  2  5  8 11 14
# satır ortalamaları
rowMeans(m1)
## [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.

# bir dizinin oluşturulması
dizi1 <- array(rnorm(60, mean = 50, sd = 2), c(3, 4, 5))
dizi1
## , , 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.

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
# tüm matrislerin 3. satırlarını seçmek
dizi2[3,,]
##    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
# yalnızca 2. matrisin 3. satırını seçmek
dizi2[3,,2]
## C1 C2 C3 C4 
## 15 18 21 24
# yalnızca 1. matrisin 1. satırının 3. sütunundaki elemanı seçmek
dizi2[1, 3, 1]
## [1] 7
# 2. matrisi seçmek
dizi2[,,2]
##    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.

# dizi2'nin 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 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.

str(liste1)
## 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.

liste1[[2]]
##  [1] 90 80 80 80 70 40 70 50 90 80
liste1[[2]][1]
## [1] 90
liste_yeni$Ad
##  [1] "Per01" "Per02" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"
liste_yeni$Ad[2]
## [1] "Per02"
liste_yeni$Ad[c(2, 4)]
## [1] "Per02" "Per04"
liste_yeni$Ad[c(2:4)]
## [1] "Per02" "Per03" "Per04"
liste_yeni$Ad[2] <- "Per11"
liste_yeni$Ad
##  [1] "Per01" "Per11" "Per03" "Per04" "Per05" "Per06" "Per07" "Per08" "Per09"
## [10] "Per10"

Listenin içindeki elemanlarda düzenlemeler gerçekleştirilebilir.

liste_yeni$Ad[2] <- "Per11"
liste_yeni$Ad
##  [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"
cinsiyet2 <- c("E", "E", "E", "E", "K", "K", "E", "E", "E", "K")
listeA[[2]] <- cinsiyet2
listeA
## [[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.

matrisK <- matrix(1:12, 2, 6)
class(matrisK)
## [1] "matrix" "array"
yenidata <- rbind(matrisK, c("elma", "çilek", "erik", "armut", "karpuz", "kiraz"))
yenidata
##      [,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"
str(yenidata)
##  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
class(data1)
## [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 <- 100:103
y <- 10
M <- c(10, 11)
N <- c(4, 5, 6)

data.frame(x, y)
##     x  y
## 1 100 10
## 2 101 10
## 3 102 10
## 4 103 10
data.frame(x, N)
## Error in data.frame(x, N): arguments imply differing number of rows: 4, 3
data.frame(M, N)
## 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"
data1[2, ]
##   id notlar ogrenciler
## 2  2     75      Ogr02
data1[, 3]
##  [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.

is.data.frame(data1[2, ])
## [1] TRUE
is.data.frame(data1[, 3])
## [1] FALSE
data1[, 3, drop = 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
is.data.frame(data1[, 3, drop = FALSE])
## [1] TRUE

Data frame’den eleman seçimi gerçekleştirilirken mantıksal operatörler de kullanılabilir.

# notu 75'ten yüksek olan öğrencilerin seçilmesi
data1[data1[2] > 75, ]
##    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.

subset(data1, ogrenciler == "Ogr06")
##   id notlar ogrenciler
## 6  6     80      Ogr06
subset(data1, notlar > 75)
##    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.

str(data1)
## '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.

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
names(data1) <- c("No", "Sınav Notu", "Ad Soyad", "GPA1", "GPA2", "GPA3")
data1
##    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
colnames(data1) <- c("Numara", "Not", "İsim", "GPA1", "GPA2", "GPA3")
data1
##    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(iris)
str(iris)
## '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 ...
head(iris)
##   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
tail(iris)
##     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
dim(iris)
## [1] 150   5
attributes(iris)
## $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
summary(iris)
##   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  
##                 
##                 
## 
table(is.na(iris))
## 
## FALSE 
##   750
subset(iris, Sepal.Width < 2.7)
##     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
subset(iris, Sepal.Width < 3 & Petal.Length > 4.5)
##     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
subset(iris, Sepal.Width < 3 | Petal.Length > 4.5)
##     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
as.character(iris$Species)
##   [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"
iris$new <- iris$Sepal.Length * iris$Petal.Length^2 - 1
head(iris, 10)
##    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(mtcars)
str(mtcars)
## '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 ...
head(mtcars)
##                    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
tail(mtcars)
##                 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
dim(mtcars)
## [1] 32 11
attributes(mtcars)
## $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"
summary(mtcars)
##       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
table(is.na(mtcars))
## 
## 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
class(dataKLM)
## [1] "data.frame"
yeniKLM <- as.matrix(dataKLM)
class(yeniKLM)
## [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
class(dataKLM)
## [1] "data.frame"
yeniKLM <- as.list(dataKLM)
class(yeniKLM)
## [1] "list"

Bir matris as.vector() fonksiyonu ile vektöre dönüştürülebilir.

MM1 <- matrix(101:112, 3, 4)
MM1
##      [,1] [,2] [,3] [,4]
## [1,]  101  104  107  110
## [2,]  102  105  108  111
## [3,]  103  106  109  112
MM2 <- as.vector(MM1)
MM2
##  [1] 101 102 103 104 105 106 107 108 109 110 111 112
class(MM2)
## [1] "integer"

Vektörler, matrisler ve listeler as.data.frame() fonksiyonu ile data frame’e dönüştürülebilir.

# vektörün data frame'e dönüştürülmesi
notlar <- c("AA", "BA", "BB", "CB", "CC")
class(notlar)
## [1] "character"
notlar2 <- as.data.frame(notlar)
class(notlar2)
## [1] "data.frame"
# matrisin data frame'e dönüştürülmesi
MM1 <- matrix(101:112, 3, 4)
class(MM1)
## [1] "matrix" "array"
MM3 <- as.data.frame(MM1)
class(MM3)
## [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"
liste_yeni2 <- as.data.frame(liste_yeni)
class(liste_yeni2)
## [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
ABCDE <- c("A", "B", "C", "D")
ABCDE[5] <- "E"
ABCDE
## [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
maas1 <- c(17500, 82000, 55000, 22500, 32500)
maas2 <- sort(maas1, decreasing = T)

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
matris_yeni <- matrix(1:30, 5, 6)
matris_yeni[-3, ]
##      [,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
data(iris)
iris_setosa <- subset(iris, Species == "setosa")
mean(iris_setosa$Petal.Length)
## [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.

Yanıt İçin Tıklayınız
matris_alistirma <- matrix(91:102, 3, 4)
matris_alistirma <- as.data.frame(matris_alistirma)
is.data.frame(matris_alistirma)
## [1] TRUE