MATRİSLER

Matrisler iki boyutlu ve tek veri türündedir. matrix() komutu ile matrisler oluşturulur. Bu komutun varsayılanı önce sütunları doldurmaktadır. Satırlardan başlayarak doldurmasını istersen eğer byrow= TRUE kullanılır. Transpozu için ise tr() kullanılır.

m1 <- matrix(1:12, ncol = 3, nrow = 4); m1
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12
matrix(1:12, ncol = 3, nrow = 4, byrow = TRUE)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## [4,]   10   11   12
t(m1)
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12

VERİ SETLERİ (DATA FRAME)

Veri setleri iki boyutludur ve çeşitli veri türlerini içerebilirler. data.frame() komutu ile veri setleri oluşturulur. Aynı uzunlukta olma şartıyla birkaç vektör birleştirilerek veri seti oluşturulabilir.

ad  <-  c("Ali","Elif","Su","Deniz","Aras", "Berk","Can","Ece","Efe","Arda")
boy <- c(160,165,170,155,167,162, 169,158,160,164)
kilo <- c(55,55,57,50,48,65, 58,62,45,47)
beden <- c("S","M","S","M","S", "L","M","L","S","S")
beden <- factor(beden)
(df <- data.frame(ad,boy, kilo, beden))
##       ad boy kilo beden
## 1    Ali 160   55     S
## 2   Elif 165   55     M
## 3     Su 170   57     S
## 4  Deniz 155   50     M
## 5   Aras 167   48     S
## 6   Berk 162   65     L
## 7    Can 169   58     M
## 8    Ece 158   62     L
## 9    Efe 160   45     S
## 10  Arda 164   47     S

Farklı uzunlukta vektörler olduğunda ve veri seti oluşturmak istendiğinde kısa olan vektör uzun olana yetişene kadar tekrar ediyor. Ancak bu durum tam kat oldukça geçerlidir. Eğer tam katı olmazsa bu işlemez.

x <- 11:14; y <- 10; M <- c(10,35); N <- 2:4
data.frame(x, y) # (4,1)
data.frame(x, M) # (4,2)
data.frame(x,N)  #(4,3) hata çünkü tam katı değiller. 

Hazır Veri Setleri

Programda kullanmak üzere çeşitli veri setleri mevcuttur. Gerekli paketler indirilir ve aktif edilir. data() ile çalışma alanına hazır veri setleri aktarılır.

data()
# install.packages("datasets")
library (datasets)
# install.packages("dslabs")
library (dslabs)
data(WorldPhones)
View(WorldPhones)

iris #enviromente ekli değil
data("iris") #enviromente eklemek için

Veri inceleme

Veri setlerini incelemek için çeşitli komutlar vardır.
dim() ile boyutlar öğrenilir.
head() ile ilk 6 satır varsayılan olarak gösterilir.
tail () ile son 6 satır varsayılan olarak gösterilir.

dim(cars)
## [1] 50  2
head(WorldPhones, n=2)
##      N.Amer Europe Asia S.Amer Oceania Africa Mid.Amer
## 1951  45939  21574 2876   1815    1646     89      555
## 1956  60423  29990 4708   2568    2366   1411      733
tail(WorldPhones, n=7)
##      N.Amer Europe Asia S.Amer Oceania Africa Mid.Amer
## 1951  45939  21574 2876   1815    1646     89      555
## 1956  60423  29990 4708   2568    2366   1411      733
## 1957  64721  32510 5230   2695    2526   1546      773
## 1958  68484  35218 6662   2845    2691   1663      836
## 1959  71799  37598 6856   3000    2868   1769      911
## 1960  76036  40341 8220   3145    3054   1905     1008
## 1961  79831  43173 9053   3338    3224   2005     1076
head(iris, n=2) ; tail(iris, n=2)
##   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
##     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
## 149          6.2         3.4          5.4         2.3 virginica
## 150          5.9         3.0          5.1         1.8 virginica
iris$Species #faktör ya da kategorik değişken olup üç değişken olduğunu görebiliriz
##   [1] setosa     setosa     setosa     setosa     setosa     setosa    
##   [7] setosa     setosa     setosa     setosa     setosa     setosa    
##  [13] setosa     setosa     setosa     setosa     setosa     setosa    
##  [19] setosa     setosa     setosa     setosa     setosa     setosa    
##  [25] setosa     setosa     setosa     setosa     setosa     setosa    
##  [31] setosa     setosa     setosa     setosa     setosa     setosa    
##  [37] setosa     setosa     setosa     setosa     setosa     setosa    
##  [43] setosa     setosa     setosa     setosa     setosa     setosa    
##  [49] setosa     setosa     versicolor versicolor versicolor versicolor
##  [55] versicolor versicolor versicolor versicolor versicolor versicolor
##  [61] versicolor versicolor versicolor versicolor versicolor versicolor
##  [67] versicolor versicolor versicolor versicolor versicolor versicolor
##  [73] versicolor versicolor versicolor versicolor versicolor versicolor
##  [79] versicolor versicolor versicolor versicolor versicolor versicolor
##  [85] versicolor versicolor versicolor versicolor versicolor versicolor
##  [91] versicolor versicolor versicolor versicolor versicolor versicolor
##  [97] versicolor versicolor versicolor versicolor virginica  virginica 
## [103] virginica  virginica  virginica  virginica  virginica  virginica 
## [109] virginica  virginica  virginica  virginica  virginica  virginica 
## [115] virginica  virginica  virginica  virginica  virginica  virginica 
## [121] virginica  virginica  virginica  virginica  virginica  virginica 
## [127] virginica  virginica  virginica  virginica  virginica  virginica 
## [133] virginica  virginica  virginica  virginica  virginica  virginica 
## [139] virginica  virginica  virginica  virginica  virginica  virginica 
## [145] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
table(iris$Species) #frekans verir.
## 
##     setosa versicolor  virginica 
##         50         50         50

Temel paket hariç diğer paketlerdeki veri setlerine data(veriseti, package="packagename") şeklinde ulaşılabilir.

data(veriseti, package="packagename")
data(CTTdata, package="CTT") 
head(CTTdata)

Eleman Seçme

Sütun seçince vektörel olarak veriyor. drop= ile satır seçimindeki gibi df halini koruyacağız.

df[1,]
##    ad boy kilo beden
## 1 Ali 160   55     S
df[,1]
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda"
df[,1, drop=FALSE]
##       ad
## 1    Ali
## 2   Elif
## 3     Su
## 4  Deniz
## 5   Aras
## 6   Berk
## 7    Can
## 8    Ece
## 9    Efe
## 10  Arda
is.data.frame(df[,1]) #veri çerçevesi mi değil mi sorguluyoruz.
## [1] FALSE
is.data.frame(df[,1, drop=FALSE])
## [1] TRUE

Veri seçimi için subset() komutu belirli koşullarda olan verileri seçebilmemiz için kullanılabilir.

subset(df, boy>165) 
##     ad boy kilo beden
## 3   Su 170   57     S
## 5 Aras 167   48     S
## 7  Can 169   58     M
subset(airquality, Day == 1, select = -Temp) #burada temp sütunu hariç birinci günü al demiş oluyoruz.
##     Ozone Solar.R Wind Month Day
## 1      41     190  7.4     5   1
## 32     NA     286  8.6     6   1
## 62    135     269  4.1     7   1
## 93     39      83  6.9     8   1
## 124    96     167  6.9     9   1

Diamonds veri seti ile subset komutu kullanımı

library(ggplot2)
subset(diamonds, price> 1000 & cut== c("Fair", "Good")) #fiyatı 1000+ olan ve fair ile good kesimlerdeki elmasları seçmek için
## # A tibble: 2,672 × 10
##    carat cut   color clarity depth table price     x     y     z
##    <dbl> <ord> <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1  0.7  Good  E     VS2      57.5    58  2759  5.85  5.9   3.38
##  2  0.7  Fair  F     VS2      65.3    55  2762  5.63  5.58  3.66
##  3  0.91 Fair  H     SI2      64.4    57  2763  6.11  6.09  3.93
##  4  0.7  Good  H     VVS2     62.1    64  2767  5.62  5.65  3.5 
##  5  0.71 Good  E     VS2      59.2    61  2772  5.8   5.88  3.46
##  6  0.83 Good  I     VS2      64.6    54  2774  5.85  5.88  3.79
##  7  0.71 Good  F     VS2      63.8    58  2777  5.61  5.64  3.59
##  8  0.7  Good  E     VS2      64.1    59  2777  5.64  5.59  3.6 
##  9  0.98 Fair  H     SI2      67.9    60  2777  6.05  5.97  4.08
## 10  0.7  Good  E     VS1      57.2    62  2782  5.81  5.77  3.31
## # ℹ 2,662 more rows
subset(df, beden=="S")
##      ad boy kilo beden
## 1   Ali 160   55     S
## 3    Su 170   57     S
## 5  Aras 167   48     S
## 9   Efe 160   45     S
## 10 Arda 164   47     S
subset(df, kilo >= 50)
##      ad boy kilo beden
## 1   Ali 160   55     S
## 2  Elif 165   55     M
## 3    Su 170   57     S
## 4 Deniz 155   50     M
## 6  Berk 162   65     L
## 7   Can 169   58     M
## 8   Ece 158   62     L

Eleman Ekleme

Eleman çeşitli şekillerde eklenebilir.

$ operatörü

S3 sütunu ekleme (Yol 1)

df2 <- data.frame(
  S1 = sample(0:100,20),
  S2 = runif(n=20 ,min= 50 , max=70)
)
head(df2)
##   S1       S2
## 1 46 50.25650
## 2 55 55.37386
## 3 31 69.66596
## 4 63 66.58836
## 5  3 67.71707
## 6 29 55.18173
df2$S3 <- sample(60:80,20,replace = TRUE)
head(df2)
##   S1       S2 S3
## 1 46 50.25650 66
## 2 55 55.37386 61
## 3 31 69.66596 62
## 4 63 66.58836 79
## 5  3 67.71707 70
## 6 29 55.18173 61

[[]] operatörü

ort sütunu ekleme (Yol 2)

df2[["ort"]] <- round(rowMeans(df2),2)
head(df2)
##   S1       S2 S3   ort
## 1 46 50.25650 66 54.09
## 2 55 55.37386 61 57.12
## 3 31 69.66596 62 54.22
## 4 63 66.58836 79 69.53
## 5  3 67.71707 70 46.91
## 6 29 55.18173 61 48.39

cbind () komutu

S4 sütunu ekleme (Yol 3)

cbind( df2, S4 = 10)
##    S1       S2 S3   ort S4
## 1  46 50.25650 66 54.09 10
## 2  55 55.37386 61 57.12 10
## 3  31 69.66596 62 54.22 10
## 4  63 66.58836 79 69.53 10
## 5   3 67.71707 70 46.91 10
## 6  29 55.18173 61 48.39 10
## 7  27 59.85594 74 53.62 10
## 8  13 51.65022 75 46.55 10
## 9  48 58.02381 70 58.67 10
## 10 41 67.44796 68 58.82 10
## 11 12 61.83218 74 49.28 10
## 12 26 67.12554 80 57.71 10
## 13 25 55.55468 62 47.52 10
## 14 62 62.79250 60 61.60 10
## 15 42 63.15938 65 56.72 10
## 16 19 58.05862 65 47.35 10
## 17 64 61.62857 63 62.88 10
## 18 17 55.69132 75 49.23 10
## 19 87 63.03255 72 74.01 10
## 20 45 69.64647 73 62.55 10

carpim adında sütun ekleme

iris$carpim <- iris$Sepal.Length*iris$Sepal.Width
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species carpim
## 1          5.1         3.5          1.4         0.2  setosa  17.85
## 2          4.9         3.0          1.4         0.2  setosa  14.70
## 3          4.7         3.2          1.3         0.2  setosa  15.04
## 4          4.6         3.1          1.5         0.2  setosa  14.26
## 5          5.0         3.6          1.4         0.2  setosa  18.00
## 6          5.4         3.9          1.7         0.4  setosa  21.06

carpim sütununu başa alma

iris2 <- iris[, c(6,1:5)]
head(iris2)
##   carpim Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1  17.85          5.1         3.5          1.4         0.2  setosa
## 2  14.70          4.9         3.0          1.4         0.2  setosa
## 3  15.04          4.7         3.2          1.3         0.2  setosa
## 4  14.26          4.6         3.1          1.5         0.2  setosa
## 5  18.00          5.0         3.6          1.4         0.2  setosa
## 6  21.06          5.4         3.9          1.7         0.4  setosa

Eleman Çıkarma

- operatörü

df2 <- df2[,-4]
df2
##    S1       S2 S3
## 1  46 50.25650 66
## 2  55 55.37386 61
## 3  31 69.66596 62
## 4  63 66.58836 79
## 5   3 67.71707 70
## 6  29 55.18173 61
## 7  27 59.85594 74
## 8  13 51.65022 75
## 9  48 58.02381 70
## 10 41 67.44796 68
## 11 12 61.83218 74
## 12 26 67.12554 80
## 13 25 55.55468 62
## 14 62 62.79250 60
## 15 42 63.15938 65
## 16 19 58.05862 65
## 17 64 61.62857 63
## 18 17 55.69132 75
## 19 87 63.03255 72
## 20 45 69.64647 73

NULL operatörü

df2$S3 <- NULL #üçü çıkardık 
head(df2,3)
##   S1       S2
## 1 46 50.25650
## 2 55 55.37386
## 3 31 69.66596

Satır Ekleme

df3 <- data.frame(S1=c(50,60),S2=c(55.3,65.5)) #eklenecek veri seti

df4 <- rbind (df2,df3) #yeni veri seti
dim(df4)
## [1] 22  2

Veri yapısını inceleme

str(df)
## 'data.frame':    10 obs. of  4 variables:
##  $ ad   : chr  "Ali" "Elif" "Su" "Deniz" ...
##  $ boy  : num  160 165 170 155 167 162 169 158 160 164
##  $ kilo : num  55 55 57 50 48 65 58 62 45 47
##  $ beden: Factor w/ 3 levels "L","M","S": 3 2 3 2 3 1 2 1 3 3
attributes(df)
## $names
## [1] "ad"    "boy"   "kilo"  "beden"
## 
## $class
## [1] "data.frame"
## 
## $row.names
##  [1]  1  2  3  4  5  6  7  8  9 10

İsimlendirme

df <- data.frame(isim = ad,
                 boyolcum = boy,
                 kiloolcum= kilo, 
                 bedenolcum=beden)
df
##     isim boyolcum kiloolcum bedenolcum
## 1    Ali      160        55          S
## 2   Elif      165        55          M
## 3     Su      170        57          S
## 4  Deniz      155        50          M
## 5   Aras      167        48          S
## 6   Berk      162        65          L
## 7    Can      169        58          M
## 8    Ece      158        62          L
## 9    Efe      160        45          S
## 10  Arda      164        47          S

ya da

df <- data.frame(ad,boy,kilo,beden)
names(df) <- c("isim","boyolcum ","kiloolcum","bedenolcum")
df
##     isim boyolcum  kiloolcum bedenolcum
## 1    Ali       160        55          S
## 2   Elif       165        55          M
## 3     Su       170        57          S
## 4  Deniz       155        50          M
## 5   Aras       167        48          S
## 6   Berk       162        65          L
## 7    Can       169        58          M
## 8    Ece       158        62          L
## 9    Efe       160        45          S
## 10  Arda       164        47          S

LİSTE

Listeler iki boyutludurlar ve pekçok türde veri türü içerebilirler. İçerisinde vektör, matris, veri seti hatta liste bile barıdırabilir. list() ile oluşturulur.

ad  <-  c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda")
boy <- c(160,165,170,155,167,162,169,158,160,164)
kilo <- c(55,55,57,50,48,65,58,62,45,47)

ad, boy ve kilo vektörleri ile liste oluşturma

liste <- list(ad,boy,kilo)
liste
## [[1]]
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda" 
## 
## [[2]]
##  [1] 160 165 170 155 167 162 169 158 160 164
## 
## [[3]]
##  [1] 55 55 57 50 48 65 58 62 45 47

Listede neler var ?

str(liste)
## List of 3
##  $ : chr [1:10] "Ali" "Elif" "Su" "Deniz" ...
##  $ : num [1:10] 160 165 170 155 167 162 169 158 160 164
##  $ : num [1:10] 55 55 57 50 48 65 58 62 45 47

Liste içindekiler isimlendirilebilir. Listelerde bileşenler numara [[1]] ya da $ ile eleman secilir.

liste # isimsiz liste, isim degil numara [[1]]
## [[1]]
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda" 
## 
## [[2]]
##  [1] 160 165 170 155 167 162 169 158 160 164
## 
## [[3]]
##  [1] 55 55 57 50 48 65 58 62 45 47
liste_isim <- list(isim = ad,boyolcum = boy,kiloolcum =kilo)
liste_isim # isimli liste $
## $isim
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda" 
## 
## $boyolcum
##  [1] 160 165 170 155 167 162 169 158 160 164
## 
## $kiloolcum
##  [1] 55 55 57 50 48 65 58 62 45 47

Listeler genellikle rapor oluşturmak için kullanılmaktadır.

require(stats); require(graphics)
fm1 <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)
summary(fm1)
## 
## Call:
## lm(formula = sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -8.2422 -2.6857 -0.2488  2.4280  9.7509 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 28.5660865  7.3545161   3.884 0.000334 ***
## pop15       -0.4611931  0.1446422  -3.189 0.002603 ** 
## pop75       -1.6914977  1.0835989  -1.561 0.125530    
## dpi         -0.0003369  0.0009311  -0.362 0.719173    
## ddpi         0.4096949  0.1961971   2.088 0.042471 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.803 on 45 degrees of freedom
## Multiple R-squared:  0.3385, Adjusted R-squared:  0.2797 
## F-statistic: 5.756 on 4 and 45 DF,  p-value: 0.0007904

KENDİNİZİ TEST EDİN