05.11.2024 tarihli R ile veri analizi dersini Veri Düzenleme ve Görşelleştirme / Kübra Atalay Kabasakal & Sebahat Gören kitabından işledik. Pisa veri setleri ile örnek kodların yazıldığı kitap ile devam eden derste R dilinin gerçekten benimle konuştuğunu, istediğini anlatarak bilgisayar üzerinen iletişim kurduğunu düşündüm.
İlk olarak kitabın kullanımı için önerilen aşağıdaki veri setlerini bilgisayara yükledik (Linke tıklayarak veri setlerini indirebilirsiniz).
Bilişsel
veri seti
Okul
veri seti
Öğrenci
anketi veri seti
İndirmelerde sıklıkla yaşanan ve tekrar karşılaştığımız hata yine dosyanın konumu ile ilgiliydi. Dosyanın bilgisayar üzerindeki yerinin bir çok hatanın kaynağı olduğunu farkettiğimden beri en çok buna dikkat ediyorum. Bu sebeple veri setlerini indirip kullanırken hiç sorun yaşamadım.
Bilgisayara indirdiğimiz veri setlerini yeni bir markdown sayfası açarak aşağıdaki kodları kullanarak programa yükledik.
github üzerinden indirebileceğimiz tuev paketi ile de veri setlerine ulaşabileceğimizi, bu pakette 2021 verilerine kadar yüklü olduğunu öğrendik.
devtools üzerinden paketi yüklemek için kullanılan kod;
Midi PISA veri setini oluşturmak için öncelikle dplyr
ve
pipe operatörünün orijinal paketi olan magrittr
paketlerini
yükledik.
Sonrasında pipe operatörünü kullanarak select
ile
istediğimiz değişkenleri seçerek midipisa veri setini oluşturduk.
Aynı yöntemleri kullanarak bir de midipisa veri seti oluşturduk.
Bu kısımda önemli olan veri setlerini kaydettiğimiz yoldu.
saveRDS
komutu ile oluşturduğumuz veri setlerini
bilgisayara yükledik.
Bu kısımda load()
fonksiyonunu kullandık. Parantez içine
veriyi kaydettiğimiz dosyanın bilgisayardaki yolunu yazdık.
NOT:Bilgisayarda verinin üzerine gelip sağ tuş tıkladığımızda “save as a path” çıkıyor. Yolu kopyalayıp parantez içine yazdığımızda “/” işaretleri ters geldiği için hata veriyor. Bu sorunu tüm işaretleri ters çevirerek ya da aynısından yanına bir tane daha ekleyerek çözebiliyoruz.
Veri seti büyük olduğu için, ilk altı satırın görüntülenmesini
istedik. Bunun için head()
fonksiyonunu kullandık.
Ardından veri seti üzerinde çalışabilmek için tidyverse
paketini aktifleştirdik. “midipisa” veri setini yeniden yükleyip düzgün
görüntülenmesini sağlamak için expss
paketini kullandık. Bu
sayede değişken etiketlerininden kurtulduk ve veri setinin görünümünde
karşılaştığımız hatalardan kurtulduk. Kodlar aşağıda verilmiştir.
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
load("C:/Users/Lenovo/Desktop/R/data/midiPISA.rda") # çalışılacak veri setinin R ortamına aktarılması
midiPISA<- expss::drop_var_labs(midiPISA) # değişken etiketlerinin atılması
Bu işlemin bir diğer alternatifinin değişken etiketlerini faktör düzeyi olarak kaydetmek olduğunu öğrendik. Bu işlem aşağıdaki kodlarla sağlanabilir.
library(sjlabelled)
midiPISA <- midiPISA %>% mutate_if(is_labelled, as_factor)
# Faktor degiskenlere duzey atama amacıyla yazılan fonksiyon
levelsnames <- function(x){
levels(x) <- names(attr(x,"labels"))
x
}
# Yazılan fonkisyonun faktor degiskenlere uygulanması
midiPISA <-mutate_if(midiPISA,is.factor, levelsnames)
miniPISA <-mutate_if(miniPISA,is.factor, levelsnames)
%>%
solundaki nesneye sağındaki fonksiyonu uygular.
Yani pipe operatörünün solundaki öğeler, sağındaki fonksiyonun ilk
argümanına iletilir. Fonksiyon ilk argümanı olan veriyi, pipe
operatörünün solundan alır, kalan argümanlar fonksiyonun sağındadır.
Yukarıda da belirttiğim gibi magrittr
paketini bu sebeple
aktifleştirdik.
Satır bazında veri seçim işlemi yapmak amacıyla filter()
fonksiyonunu kullandık. Böylece veri setindeki istenilen değişkenler
filtrelenerek sadece bu gözlemlerden oluşan yeni bir veri seti elde
edebildik. Örneğin sadece 9. sınıf verilerini görmek için;
9 veya 10. sınıf verilerini görmek için ise veya kullandık.
NOT: Burada veyadan sonra tekrar sınıf==10 yazmama gerek kalmadı. sadece “10” yazarak da kodun çalıştığını fark ettim.
NOT2: head veriler uzun olduğu için buraya da eklenmiştir.
Filter kullanarak cinsiyete göre verileri seçebilmeyi ve bir değişken olarak kaydetmeyi öğrendim.
## # A tibble: 3,396 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79201118 10 1 1 2 0.638 2
## 2 79201652 10 1 5 5 -0.0886 3
## 3 79202179 10 1 1 4 1.22 3
## 4 79202313 10 1 1 5 1.58 4
## 5 79202360 10 1 4 1 1.60 2
## 6 79203125 9 1 5 5 1.38 3
## 7 79203300 9 1 4 4 2.61 3
## 8 79203515 10 1 3 4 -1.74 4
## 9 79203553 10 1 6 5 1.19 4
## 10 79203783 10 1 5 5 -0.0254 2
## # ℹ 3,386 more rows
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
## # A tibble: 3,494 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79200768 10 2 2 2 -0.289 1
## 2 79201064 10 2 2 2 0.604 3
## 3 79201275 9 2 6 6 -1.15 2
## 4 79201481 9 2 4 4 0.667 3
## 5 79201556 10 2 4 6 0.357 3
## 6 79202033 10 2 5 5 0.931 3
## 7 79202278 10 2 0 2 0.425 3
## 8 79202343 11 2 6 6 -0.112 1
## 9 79202354 9 2 4 4 -1.13 1
## 10 79202395 9 2 2 4 1.01 4
## # ℹ 3,484 more rows
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
Ayrıca table
ile tablolar oluşturabileceğimizi
öğrendik.
##
## 1 2
## 3396 3494
##
## 1 2 3 4
## 511 1082 3664 1550
Filter, pipe operatörü, “ve” ile “veya” kullanarak verileri düzenleyebilmenin kolaylığını fark ettim.
## # A tibble: 887 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79201275 9 2 6 6 -1.15 2
## 2 79202343 11 2 6 6 -0.112 1
## 3 79203553 10 1 6 5 1.19 4
## 4 79204714 10 2 6 4 0.338 3
## 5 79200971 10 2 6 5 -0.167 3
## 6 79201796 10 2 6 6 0.842 4
## 7 79202928 10 2 6 6 -0.112 4
## 8 79204088 10 2 6 3 -0.841 2
## 9 79200826 10 1 6 6 2.61 3
## 10 79201124 10 2 6 6 -2.71 1
## # ℹ 877 more rows
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
## # A tibble: 636 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79201275 9 2 6 6 -1.15 2
## 2 79202343 11 2 6 6 -0.112 1
## 3 79201796 10 2 6 6 0.842 4
## 4 79202928 10 2 6 6 -0.112 4
## 5 79200826 10 1 6 6 2.61 3
## 6 79201124 10 2 6 6 -2.71 1
## 7 79201604 10 2 6 6 -1.15 3
## 8 79201805 10 2 6 6 1.08 3
## 9 79202821 10 2 6 6 0.538 2
## 10 79203623 10 2 6 6 0.0127 3
## # ℹ 626 more rows
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
## # A tibble: 6,586 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79200768 10 2 2 2 -0.289 1
## 2 79201064 10 2 2 2 0.604 3
## 3 79201118 10 1 1 2 0.638 2
## 4 79201275 9 2 6 6 -1.15 2
## 5 79201481 9 2 4 4 0.667 3
## 6 79201556 10 2 4 6 0.357 3
## 7 79201652 10 1 5 5 -0.0886 3
## 8 79202033 10 2 5 5 0.931 3
## 9 79202179 10 1 1 4 1.22 3
## 10 79202278 10 2 0 2 0.425 3
## # ℹ 6,576 more rows
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
## # A tibble: 128 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79203057 10 2 0 0 1.08 3
## 2 79201246 10 1 0 0 0.638 4
## 3 79206034 11 2 0 0 0.205 2
## 4 79206038 10 2 0 0 0.971 3
## 5 79203957 10 1 0 0 -0.325 3
## 6 79205430 10 1 0 0 1.01 4
## 7 79200013 10 2 0 0 -0.741 2
## 8 79201946 10 1 0 0 -0.618 1
## 9 79200998 10 1 0 0 1.23 4
## 10 79201589 10 1 0 0 0.863 4
## # ℹ 118 more rows
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
Veri setinden sütun bazında seçim yapmak için select() fonksiyonunu kullanılabilecğimizi öğrendik. Aşağıda örnekler verilmiştir.
“ST097” ile başlayanların seçilmesi
## # A tibble: 6,890 × 5
## ST097Q01TA ST097Q02TA ST097Q03TA ST097Q04TA ST097Q05TA
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 1 1 1
## 2 3 2 3 3 3
## 3 2 3 3 3 3
## 4 2 2 3 1 1
## 5 3 3 4 3 1
## 6 3 3 2 2 3
## 7 3 NA 3 3 4
## 8 3 3 2 1 2
## 9 3 4 3 4 3
## 10 3 4 2 1 1
## # ℹ 6,880 more rows
“TA” ile bitenlerin seçilmesi
## # A tibble: 6,890 × 5
## ST097Q01TA ST097Q02TA ST097Q03TA ST097Q04TA ST097Q05TA
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 1 1 1
## 2 3 2 3 3 3
## 3 2 3 3 3 3
## 4 2 2 3 1 1
## 5 3 3 4 3 1
## 6 3 3 2 2 3
## 7 3 NA 3 3 4
## 8 3 3 2 1 2
## 9 3 4 3 4 3
## 10 3 4 2 1 1
## # ℹ 6,880 more rows
“OD” içerenlerin seçilmesi
## # A tibble: 6,890 × 5
## ODOKUMA1 ODOKUMA2 ODOKUMA3 ODOKUMA4 ODOKUMA5
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 376. 418. 421. 414. 434.
## 2 512. 473. 564. 485. 500.
## 3 396. 414. 423. 452. 392.
## 4 393. 429. 365. 383. 379.
## 5 552. 570. 563. 531. 532.
## 6 441. 416. 407. 437. 473.
## 7 411. 422. 426. 385. 461.
## 8 551. 552. 509. 491. 538.
## 9 542. 534. 501. 523. 497.
## 10 434. 470. 538. 495. 502.
## # ℹ 6,880 more rows
Aşağıdaki kodu kullanarak ekleme (başına - koyarak da çıkarma) yapabileceğimizi öğrendik.
midiPISA %>%
select(OGRENCIID:ST097Q04TA,-CINSIYET) %>% # sütun bazında değişken ekleme ve çıkarma. - çıkarma için kullanılmıştır.
head(5) #ilk beş satırın görüntülenmesi
## # A tibble: 5 × 9
## OGRENCIID SINIF Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA ST097Q02TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79200768 10 2 2 -0.289 1 2
## 2 79201064 10 2 2 0.604 3 2
## 3 79201118 10 1 2 0.638 2 3
## 4 79201275 9 6 6 -1.15 2 2
## 5 79201481 9 4 4 0.667 3 3
## # ℹ 2 more variables: ST097Q03TA <dbl>, ST097Q04TA <dbl>
arrange()
fonksiyonunun satırları sıralamak amacıyla
kullanıldığını öğrendik. Sıralama işlemini alfabetik sıralamaya göre
yaptığını, fakat ek bir fonksiyon yazıldığında büyüklük sırasına göre de
sıralama yaptığını gördük. Böylece veri seti istenilen kritere göre
sıralayarak değişkenler arasındaki ilişkinin daha pratik bir şekilde
görülebileceğini öğrendik.
Bu fonksiyonunun kullanımı oldukça kolaydır; fonksiyonun
içine veri setinin adını ve sıralama için kullanılacak değişkeni yazmak
yeterli olur. Örneğin;
## # A tibble: 6,890 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79202924 9 2 6 6 NA 3
## 2 79203329 9 2 2 2 0.0127 1
## 3 79203445 10 2 6 1 -0.0738 1
## 4 79202889 9 2 1 2 -0.412 3
## 5 79201966 10 2 6 6 -0.116 3
## 6 79203650 9 2 0 5 NA 1
## 7 79206885 9 2 6 6 0.168 1
## 8 79204940 10 2 5 1 0.264 3
## 9 79201770 9 2 1 1 -0.122 3
## 10 79201089 9 2 0 0 0.137 3
## # ℹ 6,880 more rows
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
## # A tibble: 6,890 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79202969 10 1 6 6 2.08 3
## 2 79200826 10 1 6 6 2.61 3
## 3 79200072 10 2 4 4 1.60 4
## 4 79200887 9 1 6 6 2.08 3
## 5 79207038 9 2 6 6 2.61 3
## 6 79202197 10 1 6 6 0.638 3
## 7 79201373 10 1 6 6 1.33 4
## 8 79203639 10 1 3 6 0.674 2
## 9 79201125 10 2 5 5 0.370 4
## 10 79200920 10 2 5 6 0.201 4
## # ℹ 6,880 more rows
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
Pipe ile birlikte kullanımı örneği;
## # A tibble: 5 × 16
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79204460 10 2 5 6 -2.73 1
## 2 79201124 10 2 6 6 -2.71 1
## 3 79204401 10 1 6 6 -2.71 3
## 4 79206724 10 2 6 6 -2.71 1
## 5 79204126 10 2 5 5 -2.71 4
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## # ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## # ODOKUMA4 <dbl>, ODOKUMA5 <dbl>
select ve arrange birlikte kullanımı örneği;
midiPISA %>%
select(OGRENCIID,ST097Q01TA,ST097Q04TA,OKUMA_ZEVK) %>% #değişkenlerin seçimi
arrange(OKUMA_ZEVK)%>% # değişkendeki gözlemleri sıralama
head(6) #ilk 6 satırın görüntülenmesi
## # A tibble: 6 × 4
## OGRENCIID ST097Q01TA ST097Q04TA OKUMA_ZEVK
## <dbl> <dbl> <dbl> <dbl>
## 1 79204460 1 1 -2.73
## 2 79201124 1 1 -2.71
## 3 79204401 3 2 -2.71
## 4 79206724 1 3 -2.71
## 5 79204126 4 4 -2.71
## 6 79205685 3 3 -2.71
bunun için rename()
kullanılabileceğini gördük. Veri
setinden istenilen değişkenler seçilerek yeni bir veri seti oluşturulmak
istendiğinde seçilen değişkenlerin de ismini değiştirmek isteyebiliriz.
Bu durumda rename() fonksiyonu (yeni ad=eski ad) şeklinde
kullanılabilir. Örneğin;
midiPISA %>%
select(ODOKUMA1,ODOKUMA2)%>%
rename(okumapuan1=ODOKUMA1,okumapuan2=ODOKUMA2) %>%
head(3)
## # A tibble: 3 × 2
## okumapuan1 okumapuan2
## <dbl> <dbl>
## 1 376. 418.
## 2 512. 473.
## 3 396. 414.
ortaokul-ilkokul olarak isimlendirme
Okultur <- midiPISA %>%
select(1:5) %>% #ilk beş değişkenin seçimi
mutate(okul = ifelse(SINIF == 7 | SINIF == 8,
"Ortaokul", "Lise")) %>% # okul değişkeninin veri setine eklenmesi
arrange(SINIF) # veri setinin SINIF değişkenine göre sıralanması
tail(Okultur)
## # A tibble: 6 × 6
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim okul
## <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 79203092 12 1 0 1 Lise
## 2 79204140 12 2 0 1 Lise
## 3 79200174 12 1 5 5 Lise
## 4 79206519 12 1 0 0 Lise
## 5 79205173 12 1 5 5 Lise
## 6 79201478 12 1 0 1 Lise
## # A tibble: 6 × 6
## OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim okul
## <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 79204097 7 1 2 2 Ortaokul
## 2 79207110 7 2 6 1 Ortaokul
## 3 79202600 7 2 NA NA Ortaokul
## 4 79203158 8 1 5 5 Ortaokul
## 5 79206944 8 2 1 1 Ortaokul
## 6 79202569 8 2 1 0 Ortaokul
mutate()
fonksiyonu ile veri setine yeni değişkenler
eklenirken mevcut değişkenlerin de korunacağını ancak transmutate()
fonksiyonu ile eski değişkenlerin veri setiden çıkarılarak yeni
değişkenler ekleneceğini öğrendik.
Recode into different variables ve Recode into same variables
gibi…
zevk<- select(midiPISA, starts_with("ST097"))
zevk%>%
mutate(toplam =ST097Q01TA+ST097Q02TA+ST097Q03TA+ST097Q04TA+ST097Q05TA)
## # A tibble: 6,890 × 6
## ST097Q01TA ST097Q02TA ST097Q03TA ST097Q04TA ST097Q05TA toplam
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 1 1 1 6
## 2 3 2 3 3 3 14
## 3 2 3 3 3 3 14
## 4 2 2 3 1 1 9
## 5 3 3 4 3 1 14
## 6 3 3 2 2 3 13
## 7 3 NA 3 3 4 NA
## 8 3 3 2 1 2 11
## 9 3 4 3 4 3 17
## 10 3 4 2 1 1 11
## # ℹ 6,880 more rows
Kısa bir yol
## # A tibble: 3 × 6
## ST097Q01TA ST097Q02TA ST097Q03TA ST097Q04TA ST097Q05TA toplam
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 1 1 1 6
## 2 3 2 3 3 3 14
## 3 2 3 3 3 3 14
Ekleyeceğimiz sütunu, istediğimiz değişkenin başına alma
## # A tibble: 3 × 6
## toplam ST097Q01TA ST097Q02TA ST097Q03TA ST097Q04TA ST097Q05TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 6 1 2 1 1 1
## 2 14 3 2 3 3 3
## 3 14 2 3 3 3 3
Sonrasına alma
## # A tibble: 3 × 6
## ST097Q01TA toplam ST097Q02TA ST097Q03TA ST097Q04TA ST097Q05TA
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 6 2 1 1 1
## 2 3 14 2 3 3 3
## 3 2 14 3 3 3 3
NOT:transmute() fonksiyonu kullanılarak yeni değişken oluşturulduğunda, işlemde kullanılan değişkenler veri setinden çıkarılır, sadece yeni oluşturulan değişken veri setine eklenir.
## # A tibble: 6,890 × 1
## toplam
## <dbl>
## 1 6
## 2 14
## 3 14
## 4 9
## 5 14
## 6 13
## 7 NA
## 8 11
## 9 17
## 10 11
## # ℹ 6,880 more rows
Bu derste öğrendiğimiz en önemli fonksiyonlardan biri IFELSE olmuştur. En sık kullanılan fonksiyonlardan biridir ve işleri oldukça kolaylaştırır. Örneğin;
## [1] "Negatif" "Pozitif" "Negatif" "Negatif" "Pozitif"
v1 <- midiPISA %>%
mutate(ODOKUMA1_kategorik =
case_when(
ODOKUMA1 <= 402.6 ~ "dusuk",
ODOKUMA1 > 402.6 & ODOKUMA1 < 525.7 ~ "orta",
ODOKUMA1 >=525.7 ~ "yuksek" )) %>%
select(ODOKUMA1,ODOKUMA1_kategorik)
head(v1)
## # A tibble: 6 × 2
## ODOKUMA1 ODOKUMA1_kategorik
## <dbl> <chr>
## 1 376. dusuk
## 2 512. orta
## 3 396. dusuk
## 4 393. dusuk
## 5 552. yuksek
## 6 441. orta
ÖDEV OLARAK VERİLEN ANCAK DERSTE YAPTIĞIMIZ IFELSE fonksiyonu örneği;
v1 <- midiPISA %>%
mutate(ODOKUMA1_kategorik =
if_else(ODOKUMA1 <= 402.6, "dusuk",
if_else(ODOKUMA1 < 525.7, "orta", "yuksek")
)
) %>%
select(ODOKUMA1, ODOKUMA1_kategorik)
head(v1)
## # A tibble: 6 × 2
## ODOKUMA1 ODOKUMA1_kategorik
## <dbl> <chr>
## 1 376. dusuk
## 2 512. orta
## 3 396. dusuk
## 4 393. dusuk
## 5 552. yuksek
## 6 441. orta
İki kategorilide oldukça kolay olan bu komutu yazmak zor oldu. 3 kategorili olan ODOKUMA_1 değişkeni için ilk ifelse’ten sonra kalanlar için fonksiyonu yeniden yazmak gerekti. 4 kategorili olsaydı ifelse 3 defa yazılması gerekliydi.
count() fonksiyonu frekans tablosu oluşturmak için kullanılmaktadır. Yine pipe operatörü ile birlikte sıklıkla kullanılmaktadır.
## # A tibble: 3 × 2
## ODOKUMA1_kategorik n
## <chr> <int>
## 1 dusuk 1724
## 2 orta 3443
## 3 yuksek 1723
SPSS’teki select case’e benzer. group_by() dan sonra kullanılan fonksiyonlar her grup için ayrı ayrı hesaplanama yapar ve bu fonksiyon içinde sürekli değişken kullanılmaz.
summarise() fonksiyonu tek satırda veri setini özetleyerek yeni bir veri seti oluşturan fonksiyondur. Yani seçilen sütunlar için her satırı kullanarak özet istatistikleri hesaplar. Örneğin; min() minumum değer, max() maksimum değer, mean() ortalama değer, median() ortanca, quantile() q. yuzdelik, sd() standart sapma, var() varyans, diff(range())değiskenlik, first() ilk eleman, last() son eleman, nth() n. eleman n() toplam eleman sayısı, n_distinct() farklı değerlerin sayısı hesaplanabilir.
count, group_by, select ve summarise sıklıkla birlikte kullanılır.
Pipe operatörü de eklenirse daha şık ve kolay bir kod görünümü olur.
Örneğin;
tablo şeklinde sunma
library(knitr)
v1 %>%
group_by(ODOKUMA1_kategorik) %>%
summarise(ort = mean(ODOKUMA1),
sd = sd(ODOKUMA1)) %>%
kable(digits = 2,
col.names = c("kategori", "ort", "sd"))
kategori | ort | sd |
---|---|---|
dusuk | 352.59 | 38.86 |
orta | 463.50 | 34.49 |
yuksek | 577.39 | 40.58 |
Başka bir örnek
## # A tibble: 3 × 2
## ODOKUMA1_kategorik n
## <chr> <int>
## 1 dusuk 1724
## 2 orta 3443
## 3 yuksek 1723
## # A tibble: 6 × 2
## SINIF n
## <dbl> <int>
## 1 7 3
## 2 8 19
## 3 9 1295
## 4 10 5360
## 5 11 207
## 6 12 6
NOT: Bu işlem, virgül sonrası
sort=true
ile de yapılabilir.
Bu derste kitapta 2.4 across
başlığına kadar ilerledik.
Her geçen ders R diline daha fazla meraklanıyorum. Her bir özelliğini,
neler yapılabileceğini tamamen öğrenmeyi çok istiyorum.