load("data/PISA_COG_2018.rda")
load("data/PISA_OGR_2018.rda")
load("data/PISA_SCH_2018.rda")
#PISA_OGR_2018 görmek için işareti kaldır
# devtools::install_github("tuevpaket/tuev")
library("tuev")
data(PISA_COG_2018)
data(PISA_SCH_2018)
data(PISA_OGR_2018)
data("TIMSS19_acgturm7")
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(magrittr)
load("data/PISA_OGR_2018.rda")
midiPISA <- PISA_OGR_2018 %>%
select(OGRENCIID,SINIF,CINSIYET,
Anne_Egitim,Baba_Egitim,OKUMA_ZEVK,
ST097Q01TA:ST097Q05TA,ODOKUMA1:ODOKUMA5)
library(dplyr)
library(magrittr)
miniPISA <- PISA_OGR_2018 %>%
select(SINIF, CINSIYET, KITAPSAYISI, SES,
Anne_Egitim,Baba_Egitim,OKUMA_ZEVK,OK_YETERLIK,
Okuloncesi_yil, OKUL_TUR,ODOKUMA1)
df_1<-PISA_OGR_2018 %>%
select(OKUMA_BAGLILIGI,OKUMA_ZEVK,OK_ZORLUK)
saveRDS(df_1,"data/df_1.Rds")
# save(df_1,"data/df_1.Rda")
df_1 <- readRDS("data/df_1.Rds")
# install.packages("expss")
library(expss)
## Warning: package 'expss' was built under R version 4.3.3
## Loading required package: maditr
## Warning: package 'maditr' was built under R version 4.3.3
##
## To aggregate data: take(mtcars, mean_mpg = mean(mpg), by = am)
##
## Attaching package: 'maditr'
## The following objects are masked from 'package:dplyr':
##
## between, coalesce, first, last
##
## Use 'expss_output_rnotebook()' to display tables inside R Notebooks.
## To return to the console output, use 'expss_output_default()'.
##
## Attaching package: 'expss'
## The following objects are masked from 'package:magrittr':
##
## and, equals, not, or
## The following objects are masked from 'package:dplyr':
##
## compute, contains, na_if, recode, vars, where
library(tidyverse) # paketin aktifleştirilmesi
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ ggplot2 3.5.1 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ expss::and() masks magrittr::and()
## ✖ maditr::between() masks dplyr::between()
## ✖ maditr::coalesce() masks dplyr::coalesce()
## ✖ readr::cols() masks maditr::cols()
## ✖ expss::compute() masks dplyr::compute()
## ✖ tidyr::contains() masks expss::contains(), dplyr::contains()
## ✖ expss::equals() masks magrittr::equals()
## ✖ tidyr::extract() masks magrittr::extract()
## ✖ dplyr::filter() masks stats::filter()
## ✖ maditr::first() masks dplyr::first()
## ✖ stringr::fixed() masks expss::fixed()
## ✖ purrr::keep() masks expss::keep()
## ✖ dplyr::lag() masks stats::lag()
## ✖ maditr::last() masks dplyr::last()
## ✖ purrr::modify() masks expss::modify()
## ✖ purrr::modify_if() masks expss::modify_if()
## ✖ expss::na_if() masks dplyr::na_if()
## ✖ tidyr::nest() masks expss::nest()
## ✖ expss::not() masks magrittr::not()
## ✖ expss::or() masks magrittr::or()
## ✖ expss::recode() masks dplyr::recode()
## ✖ stringr::regex() masks expss::regex()
## ✖ purrr::set_names() masks magrittr::set_names()
## ✖ purrr::transpose() masks maditr::transpose()
## ✖ ggplot2::vars() masks expss::vars(), dplyr::vars()
## ✖ purrr::when() masks expss::when()
## ✖ expss::where() masks dplyr::where()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
load("data/midiPISA.rda") # çalışılacak veri setinin R ortamına aktarılması
midiPISA<- expss::drop_var_labs(midiPISA) # değişken etiketlerinin atılması
load("data/miniPISA.rda") # çalışılacak veri setinin R ortamına aktarılması
miniPISA<- expss::drop_var_labs(miniPISA) # değişken etiketlerinin atılması
midiPISA<- expss::drop_var_labs(midiPISA)
head(miniPISA)
head(midiPISA)
veri %>% ilk_fonksiyon(…..) %>% ikinci_fonksiyon(…..) %>% ucuncu_fonksiyon(…..) %>% …
library(dplyr) # paketin aktifleştirilmesi
library(magrittr) # paketin aktifleştirilmesi (pipe operatörü için)
midiPISA %>%
filter(SINIF==9) %>% #sadece 9. sınıf öğrencilerinin seçilmesi
head(5) # ilk beş satırın görüntülenmesi
library(dplyr) # paketin aktifleştirilmesi
library(magrittr) # paketin aktifleştirilmesi (pipe operatörü için)
midiPISA %>%
filter(SINIF==9 | SINIF==10) %>% #9. veya 10. sınıf öğrencilerinin seçilmesi
head(5) # ilk beş satırın görüntülenmesi
midiPISA_12 <- midiPISA %>%
filter(SINIF==9)
#En sık kullanılan mantıksal operatörler eşittir “==”, eşit değil “!=”, büyüktür “>”, küçüktür “=<”, büyük eşittir “>=”
kiz <- filter(midiPISA, CINSIYET ==1)
erkek <- filter(midiPISA, CINSIYET ==2)
table(midiPISA$CINSIYET) #frekans tablosu alma
##
## 1 2
## 3396 3494
midiPISA %>%
filter(Anne_Egitim==6 & Baba_Egitim==6)
midiPISA %>%
filter(Anne_Egitim==6 | Baba_Egitim==6)
midiPISA %>%
filter(!(Anne_Egitim==0 & Baba_Egitim==0))
midiPISA %>% filter(!SINIF==12)
midiPISA %>% filter(SINIF!=12) #Bu ikisi aynı şey
Veri setinden sütun bazında seçim yapmak için select() fonksiyonu kullanılabilir
midiPISA %>%
select(OGRENCIID:ST097Q04TA,-CINSIYET) %>% # sütun bazında değişken ekleme ve çıkarma
head(5) #ilk beş satırın görüntülenmesi
midiPISA %>%
select(starts_with("ST097")) #ile başlayan
midiPISA %>%
select(ends_with("TA")) #ile biten
midiPISA %>%
select(contains("TA")) #içeren
select’in bu iki kullanımı birbirinin aynı
midiPISA %>%
select(contains("OD"))
select(midiPISA,contains("OD"))
satırları/gözlemleri sıralamak amacıyla kullanılır.
midiPISA %>% arrange(ODOKUMA1) #küçükten büyüğe
midiPISA %>% arrange(-ODOKUMA1) #büyükten küçüğe veya
midiPISA %>% arrange(desc(ODOKUMA1)) #desc kullanarak büyükten küçüğe
#bir kısmı seçip bir değişkene göre sıralama
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
midiPISA %>%
select(ODOKUMA1,ODOKUMA2)%>%
rename(okumapuan1=ODOKUMA1,okumapuan2=ODOKUMA2) %>%
head(3)
mutate() fonksiyonu ile veri setine yeni değişkenler eklenirken mevcut değişkenler de korunur ancak transmute() fonksiyonu ile eski değişkenler veri setiden çıkarılarak yeni değişken eklenir.
#mutate(veri_seti, yeni_değişken = değişken1 + değişken2)
zevk<- select(midiPISA, starts_with("ST097"))
zevk%>%
mutate(toplam =ST097Q01TA+ST097Q02TA+ST097Q03TA+ST097Q04TA+ST097Q05TA) %>%
head(3)
aynı dönüşümü birden fazla sütuna uygulamayı kolaylaştırarak summarise() ve mutate() gibi fonkisyonların içinde select() ile aynı işlevi kullanmanıza olanak tanır.
zevk %>%
mutate(toplam=rowSums(across(ST097Q01TA:ST097Q05TA))) %>%
head(3)
yeni ekleyeceğin değişkenin yerini belirleme
zevk %>%
mutate(toplam=rowSums(across(ST097Q01TA:ST097Q05TA)),
.before= ST097Q01TA)%>%
head(3) # .after ile de arkasına
zevk %>%
transmute(toplam=rowSums(across(ST097Q01TA:ST097Q05TA))) %>%
head(2)
ifelse() programlama dillerinde sıklıkla kullanılan koşullu önermelerden biridir.
#ifelse(test = x<0, evet = ilkdeger , hayır = ikincideger)
x <- c(-2,1,-1,-3,3)
ifelse(x<0,"Negatif", "Pozitif")
## [1] "Negatif" "Pozitif" "Negatif" "Negatif" "Pozitif"
table(midiPISA$SINIF)
##
## 7 8 9 10 11 12
## 3 19 1295 5360 207 6
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)
çoklu ifelse() kullanımı ile benzer işlevi sağlar. case_when() birden fazla koşula dayalı karşılaştırmalarda yeni bir değişken oluşturmak amacıyla kullanılır.
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)
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)
v1 <- midiPISA %>%
mutate(ODOKUMA1_kategorik =
if_else(ODOKUMA1 <= 402.6, "dusuk",
if_else(ODOKUMA1 < 525.7, "orta", "yuksek")
)
) %>%
select(ODOKUMA1, ODOKUMA1_kategorik)
head(v1)
düzeylere göre inceleme
library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
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 |
frekans tablosu oluşturmak için kullanılmaktadır. Yine pipe operatörü ile birlikte sıklıkla kullanılmaktadır.
midiPISA %>% count(SINIF)
midiPISA %>% count(SINIF) %>% arrange(-n)
midiPISA %>%
summarise(mean(ODOKUMA1)) #ortalamanın hesaplanması
summarise() fonksiyonu gruplandırılmamış bir veri setinde, tüm satırlardan özet istatistik bilgileri hesaplamıştır. Bu bilgiler, veri setinde yer alan alt gruplar için ise ayrı ayrı group_by() fonksiyonu ile hesaplanabilir. 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.
midiPISA %>%
group_by(CINSIYET) %>%
summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1),min=min(ODOKUMA1),max=max(ODOKUMA1))
Özetleyici istatistiksel bilgiler, veri setinde yer alan birden fazla kategorik değişken için de hesaplanabilir. Öğrencilerin cinsiyet ve sınıf düzeylerine göre elde edilen betimsel istatistikleri ortalamaya göre büyükten küçüğe sıralanmıştır. Yapılan bu işlem “betimsel” isimli nesneye atanmıştır.
betimsel <- midiPISA%>% # betimsel veri nesnesine atama
# CINSIYET ve SINIF değişkenlerine göre gruplara ayırma
group_by(CINSIYET,SINIF) %>%
# özetleyici bilgileri hesaplama
summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1)) %>%
# gözlemleri ortalama değerleri büyükten küçüğe olacak şekilde sıralama
arrange(desc(ortalama))
## `summarise()` has grouped output by 'CINSIYET'. You can override using the
## `.groups` argument.
head(betimsel)
Gruplandırılmış elde edilen veri setlerinde tekrar işlem yapmak istenirse ungroup() fonksiyonu kullanılabilir.
midiPISA %>%
#CINSIYET ve SINIF değişkenlerine göre gruplara ayırma
group_by(CINSIYET,SINIF) %>%
# özetleyici bilgileri hesaplama
summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1)) %>%
# gözlemleri ortalama değerleri büyükten küçüğe olacak şekilde sıralama
arrange(desc(ortalama)) %>%
# grupları birleştirme
ungroup()
## `summarise()` has grouped output by 'CINSIYET'. You can override using the
## `.groups` argument.
Bir veri setinde aynı anda birden fazla sütuna aynı işlem uygulanmak istendiğinde dplyr paketi içindeki across() fonksiyonu sıklıkla kullanılmaktadır. Bu fonksiyon veri düzenleme ile ilgili birçok temel fonksiyon içinde düzgün çalışabilmektedir. Fakat genellikle select(), mutate(), filter() veya summarise() içinde kullanılır.
cols = argümanına sütunlar ve .fns = argümanına uygulanacak fonksiyonlar atanır.
midiPISA verisinde okuma puanı olası değer 1 ve 2 sütunlarına ait ortalama değerleri across() fonksiyonu ile hesaplayalım.
midiPISA %>%
summarise(across(.cols=c(ODOKUMA1,ODOKUMA2),.fns=mean, .names = "{col}_mean"))
Birden fazla istatistiksel bilgi hesaplanmak istendiğinde list() argümanı kullanılabilir. “OD” ile başlayan sütunlara ait ortalama ve standart sapma değerlerini hesaplayalım.
midiPISA %>%
summarise(across(.cols=starts_with("OD"), .fns=list(mean = mean, sd = sd)))
dplyr paket fonksiyonlarının **_at,_if,_all** uzantılı varyasyonları bulunmaktadır. Bunlardan biri olan summarise_at() fonksiyonunu bir grup sütunun ortalamasını ve standart sapmasını hesaplamak gerektiğinde kullanabilirsiniz. summarise_at() fonksiyonu ile seçilecek değişkenler vars() fonksiyonu içinde belirtilebilir. Bu işlem select() işlemi yerine geçmektedir. Hesaplama işlemlerini ise list() fonksiyonu içinde tanımlayabilirsiniz.
midiPISA %>%
summarise_at(vars(ODOKUMA1, ODOKUMA2), list(~mean(.), ~sd(.)))
summarise_at() fonksiyonu kullanılmak istenildiğinde kullanımdan kaldırılmış olduğu (deprecated) uyarısı görünür. Bir fonksiyonun daha iyi bir alternatifi mevcut ise kullanımdan kaldırılabilir. Daha önce de bahsedilen across() fonksiyonu değişken seçmek için yukarıdaki örnekte vars() fonksiyonu yerine aşağıdaki şekilde kullanılabilir. Bu sayede summarise_at() fonksiyonu yerine summarise() fonksiyonu kullanılmış olur.
midiPISA %>%
summarise(
across(c(ODOKUMA1, ODOKUMA2), list(mean = ~mean(.), sd = ~sd(.)))
)
summarise() fonksiyonlarından summarise_all () fonksiyonu ile tüm sütunlara istenilen fonksiyon uygulanabilir. Ancak bu fonksiyon kullanımdan kaldırıldığı için bu işlemin summarise() ve across() fonksiyonu ile nasıl yapıldığı gösterilmiştir.
midiPISA %>%
summarise(across(everything(), list(mean = mean, sd = sd),na.rm=TRUE))
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(everything(), list(mean = mean, sd = sd), na.rm =
## TRUE)`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
##
## # Previously
## across(a:b, mean, na.rm = TRUE)
##
## # Now
## across(a:b, \(x) mean(x, na.rm = TRUE))
Çıktıda tüm değişkenlerin eksik veriler silinerek ortalamasının alındığı görülmektedir.
Elinizdeki bir veri setinin sayısal (numeric) olan sütunlarının ortalamasını summarise_if() fonksiyonu ile hesaplayabilirsiniz. Bu hesaplamanın summarise() ve across() fonksiyonu ile nasıl yapıldığı gösterilmiştir.
midiPISA %>%
summarise(across(where(is.numeric), list(mean = mean, sd = sd), na.rm = TRUE))
top_n() fonksiyonu ile istediğiniz bir değişkenin en yüksek ya da en düşük değerlerine göre veri setinde seçim yapılabilir.
df <- data.frame(x = c(10, 4, 1, 6, 3, 1, 1))
df %>% top_n(2)
## Selecting by x
Okuma puanı en yüksek olan beş kız ve beş erkek öğrencilerin bilgileri
midiPISA %>%
# CINSIYET ve okuma olası değer1 değişkenlerinin seçilmesi
select(CINSIYET,ODOKUMA1)%>%
# büyükten küçüğe okuma puanlarının sıralanması
arrange(desc(ODOKUMA1))%>%
# CINSIYET değişkenine göre verinin gruplandırılması
group_by(CINSIYET) %>%
# okuma puanına göre her kategoriye ait en yüksek 5'er öğrencinin görüntülenmesi
top_n(5,ODOKUMA1)
top_n() fonksiyonu, “-” ile birlikte kullanıldığında, veri setindeki en düşük ilgili özelliğe sahip öğrenci/lerin bilgilerini verir. Örneğin, okuma puanı en düşük olan beş kız ve beş erkek öğrencinin bilgilerini elde edelim:
midiPISA %>%
select(CINSIYET,ODOKUMA1)%>%
arrange(desc(ODOKUMA1))%>%
group_by(CINSIYET) %>%
# okuma puanına göre her kategoriye ait en düşük 5'er öğrencinin görüntülenmesi
top_n(-5,ODOKUMA1)
join() fonksiyonları iki veri setini istenilen şekilde birleştirme amacıyla kullanılır. Örneğin elimizde A ve B olmak üzere iki farklı veri seti olsun. Her iki veri setini birleştirmek istediğimizde bu veri setlerinden hangi satır veya sütunları seçeceğimizi, satırların eşleşip eşleşmeyeceğini hangi değişkenlerle belirleneceğinin bilinmesi gerekmektedir. Bu nedenle de her bir amaca yönelik join fonksiyon türleri belirlenmiştir. Bunlar; left_join(), right_join(), full_join(), inner_join(), semi_join(), anti_join() fonksiyonlarıdır.
midiPISA1 <- midiPISA %>% select(OGRENCIID,CINSIYET,ST097Q01TA,ST097Q02TA) #değişkenlerin seçimi
midiPISA1<-midiPISA1[1:6,] #veri setinin ilk 6 satırının seçilmesi
midiPISA1
#değişkenlerin seçimi
midiPISA2<- midiPISA %>% select(OGRENCIID,OKUMA_ZEVK,ODOKUMA1)
midiPISA2<-midiPISA2[1:7,] #veri setinin ilk 7 satırının seçilmesi
midiPISA2<-midiPISA2[-3,] #veri setinin 3. satırının çıkarılması
midiPISA2
left_join() fonksiyonu ile öncelikle X1 değişkenine ait tüm gözlemler alınmıştır. X2 değişkenine ait ID numarası “1” olan gözlem olmadığı için yeni veri setinde bu kısım kayıp veri (NA) olarak girilmiştir. Burada birleştirme yapılacak iki veri setine ait örnekteki gibi ortak bir değişkenin (“ID”) olması önemlidir.
midiPISA1%>% left_join(midiPISA2) #veri birleştirme
## Joining with `by = join_by(OGRENCIID)`
A %>% left_join(B) ile B verisindeki tüm satırlar, mümkün olduğunda A verisi ile eşleştirilerek (olmadığında “NA” verir), hem A hem de B den gelen sütunlar alınır.
midiPISA1%>% right_join(midiPISA2) # veri birleştirme
## Joining with `by = join_by(OGRENCIID)`
A %>% inner_join(B) ile sadece A ve B nin eşleşen satırlarını birleştirir. Yani hem A hem de B den gelen sütunları alır.
A %>% full_join(B) ile A ve B veri setinde yer alan tüm satırları birleştirir. Hem A hem de B den gelen sütunları alır.
A %>% semi_join(B) ile A veri setinin B ile eşleşen satırları alınarak sadece A dan gelen sütunlar yeni veri setinde yer alır.
A %>% anti_join(B) ile A’nın B ile eşleşemeyen satırları alınarak yeni veri setinde sadece A’dan gelen sütunlara yer verilir.
gather() fonksiyonu bir dizi sütun alır ve onları iki yeni sütuna (kendi adını verebileceğin) dönüştürür.
Fonksiyonun kullanım şekli;
gather(data, key, value, …, na.rm = FALSE, convert = FALSE, factor_key = FALSE)
A key: Orijinal sütun adlarını saklayan bir anahtar. A value: Bu orijinal sütunlardaki değerlere sahip bir değer.
genisveri<- midiPISA %>% select(OGRENCIID,ODOKUMA1:ODOKUMA5) #belli değişkenlerin seçilmesi
genisveri %>% head(6) # verinin ilk 6 satırının görüntülenmesi
uzun <- genisveri %>% gather(O_OD,okumapuan,ODOKUMA1:ODOKUMA5)
uzun %>% arrange(OGRENCIID) %>% head(10)
spread() fonksiyonu uzun veriden tekrar geniş veri olusturmaya yarar. gather() fonksiyonunun tersi olan işlevi yapar
tekrar_genis <- uzun %>% spread(O_OD,okumapuan) # geniş veri oluşturulması
tekrar_genis %>% head(6) # ilk altı satırın görüntülenmesi
Öğrenci id değişkeni ile birlikte okuma puanlarının isimlerinin ve değerlerinin yer aldığı iki sütundan oluşan (id hariç) uzun veri seti, beş olası değerinin de ayrı birer sütun olarak yer aldığı toplam beş sütundan(id hariç) oluşan geniş veri setine dönüştürülmüştür.
###pivot_longer() ve pivot_wider()
Verilerin girilme şekli genellikle geniş ve uzun olmak üzere iki formattan oluşur. Geniş formatta veriler, bir gözlemin özellikleri veya yanıtlar tek bir satırda verilir. Genellikle veriler bu şekilde girilmesine rağmen geniş format her zaman kullanışlı olmayabilir. Geniş verinin uzun veriye dönüştürülmesini gather() ve uzun verinin geniş veriye dönüşütürülmesini spread()fonksiyonu ile gerçekleştirdik. Ancak bahsedilen iki fonksiyona alternatif yeni fonksiyonlar üretilmiştir. Bu bölümde bu iki fonksiyon açıklanacaktır.
midiPISA verisetinden daha az değişken içerecek şekilde bir geniş veri seti örneği oluşturalım.
genisveri <- midiPISA %>% select(OGRENCIID,ODOKUMA1:ODOKUMA5) #belli değişkenlerin seçilmesi
genisveri %>% head(6) # verinin ilk 6 satırının görüntülenmesi
Elde edilen çıktıda öğrenci ıd ve beş okuma olası değerinin yer aldığı toplam altı değişkenden yer alan veri seti görüntülenmektedir. Bu değişkenler sütunlarda yer almakta olup geniş veri formatındadır. pivot_longer fonksiyonu geniş veriyi, uzun veri haline getirir.
uzun <- genisveri %>% pivot_longer(names_to="okumapuan",values_to="deger",cols=ODOKUMA1:ODOKUMA5)
uzun %>% head(5)
Bir veri setini daha iyi yorumlayabilmek amacıyla uzun veri formatından geniş veri formatına dönüştürülür. Genellikle bir gözlem için değerlerin birden çok satırda yer aldığı durumlarda tercih edilir. Bunun için pivot_wider() fonksiyonu kullanılır.
genis<- uzun %>% pivot_wider(names_from="okumapuan",values_from="deger")
genis %>% head(5)
separate() fonksiyonu bir sütunu birden çok sütuna ayırır. Değerlerin sütun adlarına gömüldüğü toplanmış verilerde ortaktır. Oluşan veride okuma puanı değerlerinin karakter ve sayısal değerlerini ayırmak için separate()fonkisyonu kullanılabilir
uzun_v1 <- uzun %>% separate(okumapuan, c("OD","Sayi"),"MA") # bir sütunu iki sütuna ayırma
uzun_v1 %>% head(3) #ilk üç satırın görüntülenmesi
Elde edilen çıktıya göre, okuma puanı olası değerlerinin yer aldığı sütun ikiye ayrılarak OD sütunu ve sayı sütunundan oluşmaktadır. Çıktının ilk üç satırı görüntülendiği için tek bir öğrenciye ait üç olası değerler yer almaktadır.
separate() fonksiyonunun tam tersi olarak iki sütunu alıp tek sütunda birleştirir.
uzun_birles <- uzun_v1 %>% unite(ODOKUMA, OD, Sayi, sep = "_") # sütun birleştirmenin yapılması
uzun_birles %>% head(3) # ilk üç satırın görüntülenmesi
midiPISA %>%
# "O_" başlayan ve "OD" içeren değişkenlerin seçimi
select(starts_with("OD") & contains("MA")) %>%
lapply(.,sd) # her bir değişkenin standart sapmasının hesaplanması
## $ODOKUMA1
## [1] 87.78006
##
## $ODOKUMA2
## [1] 87.696
##
## $ODOKUMA3
## [1] 87.07692
##
## $ODOKUMA4
## [1] 87.40305
##
## $ODOKUMA5
## [1] 87.21323
midiPISA %>%
# "O_" başlayan ve "OD" içeren değişkenlerin seçimi
select(starts_with("OD") & contains("MA")) %>%
summarise(across(everything(), list(sd = sd),na.rm=TRUE)) # her bir değişkenin standart sapmasının hesaplanması
summary(midiPISA$ODOKUMA1) # betimleyici istatistiklerin özeti
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 175.6 402.6 463.4 464.2 525.7 771.5
# gruplara göre betimleyici istatistiklerin özeti
by(midiPISA$ODOKUMA1, midiPISA$CINSIYET, summary)
## midiPISA$CINSIYET: 1
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 236.4 418.2 477.6 478.1 536.9 771.5
## ------------------------------------------------------------
## midiPISA$CINSIYET: 2
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 175.6 387.5 448.0 450.7 512.2 747.5
describe ile daha ileri istatistikler alınabilir
library(psych)
## Warning: package 'psych' was built under R version 4.3.3
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
describe(midiPISA %>%
select(CINSIYET,ODOKUMA1)) # özetleyici istatistiklerinin hesaplanması
library(pastecs) # paketin aktifleştirilmesi
## Warning: package 'pastecs' was built under R version 4.3.3
##
## Attaching package: 'pastecs'
## The following object is masked from 'package:tidyr':
##
## extract
## The following objects are masked from 'package:maditr':
##
## first, last
## The following object is masked from 'package:magrittr':
##
## extract
## The following objects are masked from 'package:dplyr':
##
## first, last
round(stat.desc(midiPISA %>%
select(CINSIYET,OKUMA_ZEVK)),2) # değişkenlik katsayısının hesaplanması
tab <- table(midiPISA$Anne_Egitim) # her benzersiz değer için oluşum sayısı
tab
##
## 0 1 2 3 4 5 6
## 695 1882 1362 575 675 759 887
sort(tab, decreasing = TRUE) # en yüksekten en düşüğe doğru sıralama
##
## 1 2 6 5 0 4 3
## 1882 1362 887 759 695 675 575
midiPISA %>%
group_by(Anne_Egitim) %>% # Anne_Egitim e göre gruplandırma
count() %>% # frekans tablosu oluşturma
ungroup() # gruplandırmanın kaldırılması
summarise da kullanılabilir
midiPISA %>%
summarise(ort = mean(ODOKUMA1), # ortalama
sd = sd(ODOKUMA1), # standart sapma
n = n()) # frekans hesaplama