Veri setleri R ortamında data.frame() fonksiyonu ile oluşturulabilir. data.frame() fonksiyonu ile aynı uzunluktaki vektörlerden bir veri seti oluşturduk.
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)
df
## 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
Eğer uzunlukları farklı olan vektörlerle veri setleri oluşturulmaya çalışılırsa kısa vektör, uzun vektör uzunluğunda tekrar eder.
x <- 11:14; y <- 10; M <- c(10,35); N <- 2:4
data.frame(x, y) # (4,1)
## x y
## 1 11 10
## 2 12 10
## 3 13 10
## 4 14 10
data.frame(x, M) # (4,2)
## x M
## 1 11 10
## 2 12 35
## 3 13 10
## 4 14 35
#data.frame(x, N) # (4,3) hata verir
data.frame(y, M) # (1,2)
## y M
## 1 10 10
## 2 10 35
data.frame(y, N) # (1,3)
## y N
## 1 10 2
## 2 10 3
## 3 10 4
#data.frame(M, N) # (2,3) hata verir
R programında yüklü hazır veri setlerini görüntülemek için data() fonksiyonunu kullandık.
data()
library(datasets)
iris veri setini yükledik ve bu veri setindeki ilk 2 ve son 8 veriyi görüntülemek için head() ve tail() fonksiyonlarını kullandık.
data("iris")
head(iris, n=2) #head fonksiyonu eğer değer girilmezse default olarak ilk 6 satırı verir.
## 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
tail(iris, n=8)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 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
Bir veri setinden yalnızca istenilen özelliği çekebilmek için $ isaretini kullanabileceğimizi öğrendik. Daha sonra çektiğimiz bu sütunun frekansını table() foksiyonu ile yazdırdık.
iris$Species
## [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)
##
## setosa versicolor virginica
## 50 50 50
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
df[1,] #df’nin birinci satir elemanlarinin secilmesi
## ad boy kilo beden
## 1 Ali 160 55 S
df[,1] #df’nin birinci sütun elemanlarinin secilmesi
## [1] "Ali" "Elif" "Su" "Deniz" "Aras" "Berk" "Can" "Ece" "Efe"
## [10] "Arda"
df[1,3] # 1.satir 3.sutun secimi
## [1] 55
#Veri setlerinde satir elemanlari yazdirildiginda veri seti (data.frame), sutun elemanlari yazdirildiginda ise vektör (vector) olusmaktadır.
# satir secimi
is.data.frame(df[1,]) #TRUE
## [1] TRUE
# sutun secimi
is.data.frame(df[,1]) #FALSE
## [1] FALSE
#Sutun secimi veri seti (data.frame) olarak yapılmak istenirse, drop argümani FALSE degeri ile kullanilir.
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
Bir veri Seti içerisinde alt kümeler seçebilmek için subset() foksiyonunun kullanılabileceğini öğrendik. subset(veriseti, kosul/kosullar, select)
subset(df, boy >165) #Boyu 165cm’den uzun ögrencilerin bilgilerinin secilmesi
## ad boy kilo beden
## 3 Su 170 57 S
## 5 Aras 167 48 S
## 7 Can 169 58 M
subset(airquality, Temp > 90,select = c(Ozone, Temp))
## Ozone Temp
## 42 NA 93
## 43 NA 92
## 69 97 92
## 70 97 92
## 75 NA 91
## 102 NA 92
## 120 76 97
## 121 118 94
## 122 84 96
## 123 85 94
## 124 96 91
## 125 78 92
## 126 73 93
## 127 91 93
subset(airquality, Day == 1, select = -Temp)
## 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
subset(df, beden=="S") #df verisinde beden degiskeni “S” olan satirlarin secimi
## 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) #df verisinde kilosu 50’in altında olan kiSilerden oluSan veri seti oluSturma kodu
## ad boy kilo beden
## 5 Aras 167 48 S
## 9 Efe 160 45 S
## 10 Arda 164 47 S
Yeni bir veri çerçevesi oluşturduk. Veri setlerine yeni sütun ekleme işleminin $ operatoru ile [[]] operatoru ile cbind() fonksiyonlari ile yapilabileceğini öğrendik. Oluşturduğumuz veriye bu fonksiyonları kullanarak yeni sütunlar ekledik.
df2 <- data.frame(
S1 = sample(0:100,20),
S2 = runif(n=20 ,min= 50 , max=70)
)
head(df2)
## S1 S2
## 1 52 59.29561
## 2 72 51.06203
## 3 30 60.90078
## 4 27 65.90291
## 5 94 53.92932
## 6 21 61.59229
df2$S3 <- sample(60:80,20,replace = TRUE)
df2
## S1 S2 S3
## 1 52 59.29561 61
## 2 72 51.06203 68
## 3 30 60.90078 66
## 4 27 65.90291 68
## 5 94 53.92932 71
## 6 21 61.59229 80
## 7 62 54.70561 78
## 8 9 59.03765 68
## 9 33 59.94087 76
## 10 38 69.81784 76
## 11 46 55.06508 72
## 12 2 66.29489 66
## 13 24 63.97262 65
## 14 40 57.74116 63
## 15 77 56.95768 64
## 16 75 62.95391 79
## 17 47 51.57379 60
## 18 93 68.94827 68
## 19 39 65.50693 70
## 20 10 54.83046 78
head(df2)
## S1 S2 S3
## 1 52 59.29561 61
## 2 72 51.06203 68
## 3 30 60.90078 66
## 4 27 65.90291 68
## 5 94 53.92932 71
## 6 21 61.59229 80
df2[["ort"]] <- round(rowMeans(df2),2)
head(df2) #df2 veri setinin ilk uc sutunun rowMeans() fonksiyonu ile ortalamasinin alınarak ort isimi ile veri setine eklenmesi
## S1 S2 S3 ort
## 1 52 59.29561 61 57.43
## 2 72 51.06203 68 63.69
## 3 30 60.90078 66 52.30
## 4 27 65.90291 68 53.63
## 5 94 53.92932 71 72.98
## 6 21 61.59229 80 54.20
cbind( df2, S4 = 10)
## S1 S2 S3 ort S4
## 1 52 59.29561 61 57.43 10
## 2 72 51.06203 68 63.69 10
## 3 30 60.90078 66 52.30 10
## 4 27 65.90291 68 53.63 10
## 5 94 53.92932 71 72.98 10
## 6 21 61.59229 80 54.20 10
## 7 62 54.70561 78 64.90 10
## 8 9 59.03765 68 45.35 10
## 9 33 59.94087 76 56.31 10
## 10 38 69.81784 76 61.27 10
## 11 46 55.06508 72 57.69 10
## 12 2 66.29489 66 44.76 10
## 13 24 63.97262 65 50.99 10
## 14 40 57.74116 63 53.58 10
## 15 77 56.95768 64 65.99 10
## 16 75 62.95391 79 72.32 10
## 17 47 51.57379 60 52.86 10
## 18 93 68.94827 68 76.65 10
## 19 39 65.50693 70 58.17 10
## 20 10 54.83046 78 47.61 10
Veri setlerine değişken(sütun) ekleyip, çıkarabileceğimiz gibi gözlem(satır) de ekleyip, çIkarabiliyoruz. Veri setine iki satir eklemek için şu adımları uyguladık;
dim(df2) #kac satir kac sutun var veri setinde onu gosterir (dimension)
## [1] 20 4
df3 <- data.frame(S1=c(50,60),S2=c(55.3,65.5)) # eklenecek iki satirlik veri seti olusturma
df3
## S1 S2
## 1 50 55.3
## 2 60 65.5
df4 <- cbind (df2,df3) # yeni veri seti
df4
## S1 S2 S3 ort S1 S2
## 1 52 59.29561 61 57.43 50 55.3
## 2 72 51.06203 68 63.69 60 65.5
## 3 30 60.90078 66 52.30 50 55.3
## 4 27 65.90291 68 53.63 60 65.5
## 5 94 53.92932 71 72.98 50 55.3
## 6 21 61.59229 80 54.20 60 65.5
## 7 62 54.70561 78 64.90 50 55.3
## 8 9 59.03765 68 45.35 60 65.5
## 9 33 59.94087 76 56.31 50 55.3
## 10 38 69.81784 76 61.27 60 65.5
## 11 46 55.06508 72 57.69 50 55.3
## 12 2 66.29489 66 44.76 60 65.5
## 13 24 63.97262 65 50.99 50 55.3
## 14 40 57.74116 63 53.58 60 65.5
## 15 77 56.95768 64 65.99 50 55.3
## 16 75 62.95391 79 72.32 60 65.5
## 17 47 51.57379 60 52.86 50 55.3
## 18 93 68.94827 68 76.65 60 65.5
## 19 39 65.50693 70 58.17 50 55.3
## 20 10 54.83046 78 47.61 60 65.5
dim(df4)
## [1] 20 6
Listelerin çok esnek ve karmaşık veri yapılarına sahip olabileceğini, listelerin farklı türlerde, farklı uzunluklarda verileri bir araya getirebildiğini öğrendik. Liste oluşturabilmek için list() fonksiyonunu kullandık.
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 vektorleri ile liste olusturulmasi
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
Listeler kendi içinde de farklı listeler barındırabilir. Bu 2 bileşenli listeler için list() ve c() kodlarını kullandık.
liste2 <- list(liste,c(1,2,3)) # liste ici liste
str(liste2)
## List of 2
## $ :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
## $ : num [1:3] 1 2 3
Liste bileşenleri isimlendirilebilir. Bunun için her bir vektöre isim ataması yaptık.
liste_isim <- list(isim = ad,boyolcum = boy,kiloolcum =kilo)
liste_isim
## $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
df <- data.frame(
Tamsayi = integer(0),
Ondaliksayi = numeric(0),
Karakter = character(0),
Mantıksal = logical(0),
Faktor = factor(levels = character(0))
)
cat("[1] \"Bos data.framenin yapısı:\"\n")
## [1] "Bos data.framenin yapısı:"
str(df)
## 'data.frame': 0 obs. of 5 variables:
## $ Tamsayi : int
## $ Ondaliksayi: num
## $ Karakter : chr
## $ Mantıksal : logi
## $ Faktor : Factor w/ 0 levels:
ad = c('Su','Pera','Sule','Can','Cem','Name','Aras','Mete','Kaan','Pelin')
puan = c(12.5, 9, 16.5, 12, 9, 20, 14.5, 13.5, 8, 19)
deneme = c(1, NA, 2, NA, 2, NA, 1, NA, 2, 1)
bonus = c(1,0,1, 0, 0, 1, 1, 0,0, 1)
df<- data.frame(ad, puan, deneme, bonus)
df
## ad puan deneme bonus
## 1 Su 12.5 1 1
## 2 Pera 9.0 NA 0
## 3 Sule 16.5 2 1
## 4 Can 12.0 NA 0
## 5 Cem 9.0 2 0
## 6 Name 20.0 NA 1
## 7 Aras 14.5 1 1
## 8 Mete 13.5 NA 0
## 9 Kaan 8.0 2 0
## 10 Pelin 19.0 1 1
#?subset
eksik_veriler<-subset(df, is.na(deneme))
eksik_veri_sayisi<-nrow(eksik_veriler)
eksik_veri_sayisi
## [1] 4
cat("Deneme sutunundaki NA sayisi:", eksik_veri_sayisi, "\n")
## Deneme sutunundaki NA sayisi: 4
Burada korelasyon formülüne yer verilmiştir.
\[ r = \frac{n \sum{XY} - \sum{X} \sum{Y}}{\sqrt{[n \sum{X^2} - (\sum{X})^2][n \sum{Y^2} - (\sum{Y})^2]}} \]