OLC750 Ara Sınav: Sorular ve Cevapları

1) 1 ile 10000 arasında 3 veya 29 sayılarına kalansız bölünebilen tüm sayıların toplamını bulunuz (15 puan)

x<-1:10000
mod3<-x%%3==0
kat3<-x[mod3]

mod29<-x%%29==0
kat29<-x[mod29]

mod87<-x%%87==0
kat87<-x[mod87]

toplam<-sum(kat3)+sum(kat29)-sum(kat87)
toplam
## [1] 17818908

2) Belirli bir örüntü sergileyen aşağıdaki sayılardan oluşan vektörü örüntü oluşturabilecek bir fonksiyon ile “dizi” adı ile oluşturunuz. (10 puan)

[1]  12  17  22  27  32  37  42  47  52  57  62  67  72  77  82
[16]  87  92  97 102 107
dizi<-seq(12,107,by=5)

Temel pakette yer alan uygun fonksiyonları kullanarak aşağıdaki işlemleri gerçekleştiriniz. “dizi” vektörünün

a. elemanlarının toplamını bulunuz. (2p)

sum(dizi)
## [1] 1190

b. eleman sayısını bulunuz. (2p)

length(dizi)
## [1] 20

c. elemanlarının ortalamasını bulunuz.(2p)

mean(dizi)
## [1] 59.5

d. 3., 5., ve 10. elemanlarından bir vektör oluşturunuz.(2p)

sub_dizi<-dizi[c(3,5,10)]

e. elemanlarını tersine çevirip, yeni oluşan vektörün 7. elemanını yazdırınız. (2p)

rev(dizi)[7]
## [1] 77

3) Bir öğrencinin her biri 25 maddeden oluşan beş seçenekli dört farklı alt testte ilişkin doğru, yanlış ve boş cevap sayıları aşağıdaki tabloda sunulmuştur.

TEST DOGRU YANLIS BOS
Test_1 8 17 0
Test_2 20 5 0
Test_3 19 4 2
Test_4 5 18 2

a. Tabloda yer alan “DOGRU”,“YANLIS” ve “BOS” sütunlarını belirtilen sıra ve isimlerle birer vektör olarak oluşturunuz. (3p)

DOGRU<-c(8,20,19,5)
YANLIS<-c(17,5,4,18)
BOS<-c(0,0,2,2)

b. “a” seçeneğinde oluşturulan üç vektör ile “not” isminde bir matris oluşturunuz. (3p)

not<-matrix(c(DOGRU, YANLIS, BOS), ncol=3, byrow=FALSE)
not
##      [,1] [,2] [,3]
## [1,]    8   17    0
## [2,]   20    5    0
## [3,]   19    4    2
## [4,]    5   18    2

c. “DOGRU”,“YANLIS” ve “BOS” vektörlerini çalışma alanından silerek, “not” matrisinin 2. satir, 3 sütun elemanını yazdırınız. (3p)

rm(DOGRU); rm(YANLIS); rm(BOS)

not[2,]
## [1] 20  5  0

d. Öğrencinin düzeltme formülü hesaplanarak kullanılmış, net sayılarını “NET” adlı bir sütun olarak “not” matrisine ekleyin. (3p)

"düzeltme formülü: doğru yanıt sayıdan, yanlış yanıt sayısının seçenek sayısının bir eksiğine bölünerek çıkartılması ile elde edilir.

NET=Dogru−(Yanlis/(Seceneksayısı−1))

net<-matrix(not[,1]-(not[,2]/4), ncol = 1, byrow = FALSE)
not<-cbind(not,net)
not
##      [,1] [,2] [,3]  [,4]
## [1,]    8   17    0  3.75
## [2,]   20    5    0 18.75
## [3,]   19    4    2 18.00
## [4,]    5   18    2  0.50

e. Oluşturulan matrisi data.frame/verisetine dönüştürüp, tablonun ilk sütununda yer alan test adlarını data.frame/verisetine ekleyin. (3p)

not<-data.frame(not)
rownames(not)<-paste("Test",1:4,sep = "_")
colnames(not)<-c("Dogru", "Yanlis", "Bos", "Net")
not
##        Dogru Yanlis Bos   Net
## Test_1     8     17   0  3.75
## Test_2    20      5   0 18.75
## Test_3    19      4   2 18.00
## Test_4     5     18   2  0.50

4) İçsel motivasyon ve dışsal motivasyon olmak üzere iki alt boyutu olan motivasyon ölçeği farklı gruplara uygulanmıştır.

a.“.Rdata” uzantılı dosyayı R çalışma alanına “motivasyon” adı ile ekleyiniz. (2p)

load(paste(getwd(), "/KORKUT_KOCAKmot.Rdata",sep=""))

motivasyon<-M4
motivasyon[1:5,1:5]
##      cinsiyet icsel_1 icsel_2 icsel_3 icsel_4
## [1,]        1       1       1       1       0
## [2,]        0       0       1       1       1
## [3,]        1       1       1       0       0
## [4,]        1       0       0       1       1
## [5,]        1       0       0       1       1

b. Ölçeğin kaç kişiye uygulandığını belirtiniz. (2p)

nrow(motivasyon)
## [1] 483

c. “motivasyon” adli nesnenin ilk sütunu cinsiyet bilgilerini, sonraki dokuz madde içsel motivasyon alt boyutuna ait maddeleri, son altı madde ise dışşal motivasyon alt boyutuna ait maddeleri içermektedir. Sütunları uygun isimlerle isimlendiriniz. (2p)

colnames(motivasyon)<-c("cinsiyet",paste("icsel",1:9,sep="_"),paste("dissal",1:6,sep = "_"))

motivasyon[1:4,c(1:4,12:13)]
##      cinsiyet icsel_1 icsel_2 icsel_3 dissal_2 dissal_3
## [1,]        1       1       1       1        0        1
## [2,]        0       0       1       1        0        1
## [3,]        1       1       1       0        0        0
## [4,]        1       0       0       1        0        0

Not: Veri .Rdata uzantılı olarak kaydedilmiş olduğu için çalışma alanına yüklerken sütun isimleri mevcut şekilde yüklenmiştir. Yukarıdaki kod ile, matrisin sütun isimleri olmasa idi mevcut şekilde isimlendirilmesini sağlayacaktı.

d. İçsel motivasyon alt boyutuna ait maddelerden toplam puan alarak “icsel” isminde yeni bir sütun oluşturunuz. (3p)

library(dplyr)

motivasyon<-as_tibble(motivasyon)

motivasyon<-motivasyon %>% mutate(icsel=rowSums(select(., icsel_1:icsel_9)),.before=dissal_1)

motivasyon
## # A tibble: 483 x 17
##    cinsiyet icsel_1 icsel_2 icsel_3 icsel_4 icsel_5 icsel_6 icsel_7 icsel_8
##       <int>   <int>   <int>   <int>   <int>   <int>   <int>   <int>   <int>
##  1        1       1       1       1       0       1       1       0       1
##  2        0       0       1       1       1       1       0       0       1
##  3        1       1       1       0       0       1       1       1       1
##  4        1       0       0       1       1       0       0       1       0
##  5        1       0       0       1       1       1       0       0       1
##  6        0       1       1       1       0       1       1       0       1
##  7        0       1       0       1       1       0       1       1       0
##  8        1       1       1       1       1       1       0       1       1
##  9        0       0       1       0       0       1       1       0       0
## 10        1       1       1       0       1       1       1       1       1
## # ... with 473 more rows, and 8 more variables: icsel_9 <int>, icsel <dbl>,
## #   dissal_1 <int>, dissal_2 <int>, dissal_3 <int>, dissal_4 <int>,
## #   dissal_5 <int>, dissal_6 <int>

e. Dışsal motivasyon alt boyutuna ait maddelerden toplam puan alarak “dissal” isminde yeni bir sütun oluşturunuz. (3p)

motivasyon<-motivasyon %>% mutate(dissal=rowSums(select(., dissal_1:dissal_6)), .after=dissal_6)

motivasyon
## # A tibble: 483 x 18
##    cinsiyet icsel_1 icsel_2 icsel_3 icsel_4 icsel_5 icsel_6 icsel_7 icsel_8
##       <int>   <int>   <int>   <int>   <int>   <int>   <int>   <int>   <int>
##  1        1       1       1       1       0       1       1       0       1
##  2        0       0       1       1       1       1       0       0       1
##  3        1       1       1       0       0       1       1       1       1
##  4        1       0       0       1       1       0       0       1       0
##  5        1       0       0       1       1       1       0       0       1
##  6        0       1       1       1       0       1       1       0       1
##  7        0       1       0       1       1       0       1       1       0
##  8        1       1       1       1       1       1       0       1       1
##  9        0       0       1       0       0       1       1       0       0
## 10        1       1       1       0       1       1       1       1       1
## # ... with 473 more rows, and 9 more variables: icsel_9 <int>, icsel <dbl>,
## #   dissal_1 <int>, dissal_2 <int>, dissal_3 <int>, dissal_4 <int>,
## #   dissal_5 <int>, dissal_6 <int>, dissal <dbl>

f. Cinsiyet sütunu faktor olarak tanımlayınız, faktör düzeylerini 0 Kadin, 1 Erkek olacak şekilde belirtiniz. (3p)

motivasyon$cinsiyet<-factor(motivasyon$cinsiyet,levels = c(0,1), labels = c("Kadin", "Erkek"))

motivasyon[1:4, 1:5]
## # A tibble: 4 x 5
##   cinsiyet icsel_1 icsel_2 icsel_3 icsel_4
##   <fct>      <int>   <int>   <int>   <int>
## 1 Erkek          1       1       1       0
## 2 Kadin          0       1       1       1
## 3 Erkek          1       1       0       0
## 4 Erkek          0       0       1       1

g. “dissal” değişkeninin betimsel istatistiklerini cinsiyet değişkenin düzeylerine göre ayrı ayrı hesaplayınız. (3p)

motivasyon %>% group_by(cinsiyet) %>% summarise(n=n(), ort_dissal=mean(dissal), maks.=max(dissal), min.=min(dissal), s_sapma=sd(dissal))
## # A tibble: 2 x 6
##   cinsiyet     n ort_dissal maks.  min. s_sapma
##   <fct>    <int>      <dbl> <dbl> <dbl>   <dbl>
## 1 Kadin      244       3.09     6     0    1.23
## 2 Erkek      239       2.91     6     0    1.30

h. Veri setini “icsel” değişkeninin değerleri küçükten büyüğe olacak şekilde sıralayınız. (2p

arrange(motivasyon, dissal)
## # A tibble: 483 x 18
##    cinsiyet icsel_1 icsel_2 icsel_3 icsel_4 icsel_5 icsel_6 icsel_7 icsel_8
##    <fct>      <int>   <int>   <int>   <int>   <int>   <int>   <int>   <int>
##  1 Kadin          0       1       1       1       1       1       1       0
##  2 Erkek          0       0       1       0       0       1       0       1
##  3 Kadin          0       0       0       0       1       1       1       0
##  4 Erkek          0       0       0       1       0       0       0       1
##  5 Erkek          0       0       0       0       0       0       1       1
##  6 Kadin          1       1       0       1       0       1       0       1
##  7 Erkek          1       1       1       0       0       1       0       0
##  8 Kadin          0       0       1       0       0       0       1       0
##  9 Kadin          0       1       1       0       1       0       1       1
## 10 Erkek          1       0       0       0       1       1       1       0
## # ... with 473 more rows, and 9 more variables: icsel_9 <int>, icsel <dbl>,
## #   dissal_1 <int>, dissal_2 <int>, dissal_3 <int>, dissal_4 <int>,
## #   dissal_5 <int>, dissal_6 <int>, dissal <dbl>

5. Aşağıdaki elemanlardan oluşan listeyi oluşturunuz.

## $B1
## [1] "4-A" "4-B" "4-C" "4-D" "4-E"
## 
## $B2
## $B2[[1]]
## [1] "B" "A" "R" "L" "E" "T" "T"
## 
## 
## $B3
## $B3[[1]]
## [1] "B"     "RLETT"
## 
## 
## $B4
##     c1  c2  c3  c4
## s1 200 275 350 425
## s2 215 290 365 440
## s3 230 305 380 455
## s4 245 320 395 470
## s5 260 335 410 485

a. Listeyi “L1” adi ile oluşturunuz. (3p

b1<-paste(4, LETTERS[1:5], sep="-")
b2<-list(substring("BARLETT",1:7,1:7))
b3<-strsplit("BARLETT", "A")
b4<-matrix(seq(200,485,by=15),ncol=4,byrow=FALSE)
    dimnames(b4)<-list(paste("s",1:5,sep=""), paste("c",1:4,sep=""))
    
L1<-list(B1=b1,B2=b2,B3=b3,B4=b4)

L1
## $B1
## [1] "4-A" "4-B" "4-C" "4-D" "4-E"
## 
## $B2
## $B2[[1]]
## [1] "B" "A" "R" "L" "E" "T" "T"
## 
## 
## $B3
## $B3[[1]]
## [1] "B"     "RLETT"
## 
## 
## $B4
##     c1  c2  c3  c4
## s1 200 275 350 425
## s2 215 290 365 440
## s3 230 305 380 455
## s4 245 320 395 470
## s5 260 335 410 485

b. Listenin bileşen sayısını yazdırınız. (3p)

length(L1)
## [1] 4

c. Listenin “B4” adli bileşenininin 2. satır 2. sütun elemanını yazdırınız. (3p)

L1$B4[2,2]
## [1] 290

d. Listenin birinci elemanı 5 elemanlı bir vektördür. Bu bileşenin elemanlarından “v1” adlı vektör oluşturunuz. (3p)

 v1<-as.vector(L1$B1)
 v1
## [1] "4-A" "4-B" "4-C" "4-D" "4-E"

e. “v1” vektörünün elemanlarını birleştirerek tek elemanlı bir karakter vektör oluşturunuz. (3p)

v1<-paste(v1, collapse=" ")
v1
## [1] "4-A 4-B 4-C 4-D 4-E"

6. 700 öğrencinin öğrenci numarası, okuduğu fakülte ve hazırlık atlama sınavının 4 alt testinden aldığı puanlar “prof.xlsx” dosyasında yer almaktadır.

a. excel dosyasını R ortamına “prof” adlı nensne olusturarak aktarınız. (2p)

library(readxl)
prof <- read_excel("prof.xlsx")
prof <- as_tibble(prof)

b. Oluşan nesnede puanlar değişkeni/sütunu sırası ile reading-listening-speaking-writing alt testlerinin puanlarını içermektedir. Dört alt test puanlarının ayrı sütunlarda yer almasını sağlayacak komutu yazınız. Çıktısı aşağıdaki gibi olmalıdır. (5p)

## # A tibble: 3 x 7
##      ID Fakulte     TURU      reading listening speaking writing
##   <dbl> <chr>       <chr>       <int>     <int>    <int>   <int>
## 1 21549 Muhendislik Fakultesi       1        16       17      10
## 2 21445 Tıp         Fakultesi      25         3        5      12
## 3 21435 Eedebiyat   Fakultesi      15        20       20      22
library(data.table)

setDT(prof)[, c("reading", "listening", "speaking", "writing") := tstrsplit(puanlar, "-")] [, puanlar:=NULL][]
##         ID     Fakulte      TURU reading listening speaking writing
##   1: 21549 Muhendislik Fakultesi       1        16       17      10
##   2: 21445         Tıp Fakultesi      25         3        5      12
##   3: 21435   Eedebiyat Fakultesi      15        20       20      22
##   4: 21346      Egitim Fakultesi      22         8       20      21
##   5: 21958   Eedebiyat Fakultesi      13         8        6       0
##  ---                                                               
## 696: 21488 Muhendislik Fakultesi      20         2       23       9
## 697: 21348 Muhendislik Fakultesi      13         5        9       2
## 698: 21906         Tıp Fakultesi      18         8       10      18
## 699: 21618         Tıp Fakultesi      14         8       12      22
## 700: 21436   Eedebiyat Fakultesi       9        20       21      20
sutunlar<-c("reading","listening", "speaking", "writing")
prof[, (sutunlar) := lapply(.SD, as.integer),
           .SDcols = sutunlar][]
##         ID     Fakulte      TURU reading listening speaking writing
##   1: 21549 Muhendislik Fakultesi       1        16       17      10
##   2: 21445         Tıp Fakultesi      25         3        5      12
##   3: 21435   Eedebiyat Fakultesi      15        20       20      22
##   4: 21346      Egitim Fakultesi      22         8       20      21
##   5: 21958   Eedebiyat Fakultesi      13         8        6       0
##  ---                                                               
## 696: 21488 Muhendislik Fakultesi      20         2       23       9
## 697: 21348 Muhendislik Fakultesi      13         5        9       2
## 698: 21906         Tıp Fakultesi      18         8       10      18
## 699: 21618         Tıp Fakultesi      14         8       12      22
## 700: 21436   Eedebiyat Fakultesi       9        20       21      20

c. Tüm değişken adlarının küçük harfle yazılmasını sağlayan komutu oluşturunuz. Çıktısı aşağıdaki gibi olmalıdır. (3p)

## # A tibble: 3 x 7
##      id fakulte     turu      reading listening speaking writing
##   <dbl> <chr>       <chr>       <int>     <int>    <int>   <int>
## 1 21549 Muhendislik Fakultesi       1        16       17      10
## 2 21445 Tıp         Fakultesi      25         3        5      12
## 3 21435 Eedebiyat   Fakultesi      15        20       20      22
prof<-as_tibble(prof)
prof<-prof %>% rename_with(tolower)
prof
## # A tibble: 700 x 7
##       id fakulte     turu      reading listening speaking writing
##    <dbl> <chr>       <chr>       <int>     <int>    <int>   <int>
##  1 21549 Muhendislik Fakultesi       1        16       17      10
##  2 21445 Tıp         Fakultesi      25         3        5      12
##  3 21435 Eedebiyat   Fakultesi      15        20       20      22
##  4 21346 Egitim      Fakultesi      22         8       20      21
##  5 21958 Eedebiyat   Fakultesi      13         8        6       0
##  6 21273 Egitim      Fakultesi       4         6       24       6
##  7 21552 Muhendislik Fakultesi       4        20        0       8
##  8 21168 Eedebiyat   Fakultesi       1        15       19      16
##  9 21575 Egitim      Fakultesi       7        24       23       1
## 10 21645 Tıp         Fakultesi      17         8       14      22
## # ... with 690 more rows

d. “fakulte” ve “turu” sütunlarını tek bir sütunda birleştiriniz. Çıktısı aşağıdaki gibi olmalıdır. (2p)

## # A tibble: 3 x 6
##      id fakulte               reading listening speaking writing
##   <dbl> <chr>                   <int>     <int>    <int>   <int>
## 1 21549 Muhendislik_Fakultesi       1        16       17      10
## 2 21445 Tıp_Fakultesi              25         3        5      12
## 3 21435 Eedebiyat_Fakultesi        15        20       20      22
prof<-as.data.table(prof)

prof[,"fakulte":=paste(fakulte, turu, sep= "_")][,turu:=NULL][]
##         id               fakulte reading listening speaking writing
##   1: 21549 Muhendislik_Fakultesi       1        16       17      10
##   2: 21445         Tıp_Fakultesi      25         3        5      12
##   3: 21435   Eedebiyat_Fakultesi      15        20       20      22
##   4: 21346      Egitim_Fakultesi      22         8       20      21
##   5: 21958   Eedebiyat_Fakultesi      13         8        6       0
##  ---                                                               
## 696: 21488 Muhendislik_Fakultesi      20         2       23       9
## 697: 21348 Muhendislik_Fakultesi      13         5        9       2
## 698: 21906         Tıp_Fakultesi      18         8       10      18
## 699: 21618         Tıp_Fakultesi      14         8       12      22
## 700: 21436   Eedebiyat_Fakultesi       9        20       21      20

e. Değişkenlerde bulunan eksik veri sayılarını hesaplayınız. (2p)

prof[,sum(is.na(.SD)), .SDcols="reading"]
## [1] 13
prof[,sum(is.na(.SD)), .SDcols="listening"]
## [1] 23
prof[,sum(is.na(.SD)), .SDcols="speaking"]
## [1] 14
prof[,sum(is.na(.SD)), .SDcols="writing"]
## [1] 24

Kayıp veri toplamı bulunmak istenirse aşağıdaki kod kullanılabilir:

prof[,sum(is.na(.SD)), .SDcols=3:6]
## [1] 74

f. En az iki alt testte eksik verisi olan öğrencileri veri setinden çıkarınız. (2p)

prof<-prof[rowSums(is.na(prof))<2,]
nrow(prof)
## [1] 697

g. Bir alt testte eksik verisi olan öğrencilerin ilgili alt test puanına 0 değerini atayınız. (2p)

prof[is.na(prof)]<-0

prof[,sum(is.na(.SD)), .SDcols=3:6]
## [1] 0

İkinci satırdaki kod ile kayıp veri olmadığı gösterilmiştir.

Birinci satırdaki kod küçük verilerde çalışmakta iken büyük verilerde sistem belleği yetersizliği sorunu yaratabilmektedir.

h. Öğrencilerin alt test toplam puanlarını toplam adlı yeni bir sütuna ekleyiniz ve veri setini toplam puana göre büyükten küçüğe doğru sıralayınız. (2p)

prof<-prof[,toplam:=rowSums(.SD), .SDcols=3:6][order(-toplam)][]
prof
##         id               fakulte reading listening speaking writing toplam
##   1: 21736   Eedebiyat_Fakultesi      25        21       23      22     91
##   2: 21975      Egitim_Fakultesi      21        24       25      21     91
##   3: 21442   Eedebiyat_Fakultesi      23        25       19      20     87
##   4: 21389         Tıp_Fakultesi      21        18       25      23     87
##   5: 21720         Tıp_Fakultesi      25        21       21      19     86
##  ---                                                                      
## 693: 21297         Tıp_Fakultesi       9         0        6       0     15
## 694: 21819   Eedebiyat_Fakultesi       0        14        0       0     14
## 695: 21699      Egitim_Fakultesi       8         2        0       3     13
## 696: 21768   Eedebiyat_Fakultesi       6         3        3       0     12
## 697: 21304 Muhendislik_Fakultesi       4         1        3       0      8

i. Toplam puanı 65 ve üzerinde olan öğrencilerden olusturdugunuz veri setini “gecti” ismi ile “.csv” uzantili olarak calisma dizinine kaydediniz. (5p)

gecti<-prof[toplam>=65, .SD, .SDcols=c(1:2,7)]

write.csv(gecti,paste(getwd(),"/gecti.csv",sep="" ),row.names = FALSE,quote = FALSE )

Not: Eğer tüm sütunlar yazdırılmak isteniyorsa birinci satırdaki kodun i. bileşeni yeterlidir.