Data frame, R’da verileri tablo şeklinde kaydetmek icin kullanilir. Data frameler yapı olarak matristlere benzer fakat matristlerde her sütundaki veriler aynı türden olmak zorundadır. Bu noktada data frame ön plana çıkıyor çünkü data frame içinde bulunan farklı sütunlar, farklı türden veri içerebilir.
Peki data frameler nasıl oluşturulur?
df_1 <- data.frame(
mevsim = c("ilkbahar", "yaz", "sonbahar", "kış"),
ort_sicaklik = c(16.2, 28.6, 18.1, 7.9)
)
df_1
## mevsim ort_sicaklik
## 1 ilkbahar 16.2
## 2 yaz 28.6
## 3 sonbahar 18.1
## 4 kış 7.9
nrow(df_1) # nrow() fonksiyonu ile satir sayisina erişiriz
## [1] 4
ncol(df_1) # ncol() fonksiyonu ile sütun sayisina erişiriz
## [1] 2
İki data frame nasıl birleştirilir ?
df_2 <- data.frame(
kitap_adi = c("marsli", "ucurtma avcisi", "olu ozanlar dernegi"),
sayfa_sayisi = c(416, 424, 136),
yazar = c("Andy Weir", "Khaled Hosseini", "N. H. Kleinbaum")
)
df_2
## kitap_adi sayfa_sayisi yazar
## 1 marsli 416 Andy Weir
## 2 ucurtma avcisi 424 Khaled Hosseini
## 3 olu ozanlar dernegi 136 N. H. Kleinbaum
df_3 <- data.frame(
film_adi = c("marsli", "ucurtma avcisi", "olu ozanlar dernegi"),
film_suresi = c(140, 122, 128),
yonetmen = c("Peter Weir", "Marc Forster", "Peter Weir")
)
df_3
## film_adi film_suresi yonetmen
## 1 marsli 140 Peter Weir
## 2 ucurtma avcisi 122 Marc Forster
## 3 olu ozanlar dernegi 128 Peter Weir
df_column <- cbind(df_2, df_3) # iki data frame yan yana eklenir
df_column
## kitap_adi sayfa_sayisi yazar film_adi
## 1 marsli 416 Andy Weir marsli
## 2 ucurtma avcisi 424 Khaled Hosseini ucurtma avcisi
## 3 olu ozanlar dernegi 136 N. H. Kleinbaum olu ozanlar dernegi
## film_suresi yonetmen
## 1 140 Peter Weir
## 2 122 Marc Forster
## 3 128 Peter Weir
# ayni sekilde rbind() fonksiyonu ise iki data frame i alt alta ekler
# fonksiyon kullanmadanda iki data frame birleştirilebilir
df_4 <- data.frame(
df_2,
df_3
)
df_4
## kitap_adi sayfa_sayisi yazar film_adi
## 1 marsli 416 Andy Weir marsli
## 2 ucurtma avcisi 424 Khaled Hosseini ucurtma avcisi
## 3 olu ozanlar dernegi 136 N. H. Kleinbaum olu ozanlar dernegi
## film_suresi yonetmen
## 1 140 Peter Weir
## 2 122 Marc Forster
## 3 128 Peter Weir
df_1 ve df_2 data framelerini cbind() fonksiyonu ile birleştirirken kitap_adi ve film_adi değişkenlerinin aynı gözlemlere sahip olduğunu görmüşsünüzdür. merge() fonksiyonu ile bu sorunu ortadan kaldırabiliriz. Ancak bu iki degiskenin isimleri aynı olmalıdır.
# colnames() fonksiyonu ile sutunlari adlandirirken, rownames() fonksiyonu ile satirlari isimlendiririz
colnames(df_3) <- c("kitap_adi", "film_suresi", "yonetmen") # merge() fonksiyonunu kullanabilmek icin film_adi olan degiskeni kitap_adi olarak degistirdik
df_column_2 <- merge(df_2, df_3, by = "kitap_adi")
df_column_2
## kitap_adi sayfa_sayisi yazar film_suresi
## 1 marsli 416 Andy Weir 140
## 2 olu ozanlar dernegi 136 N. H. Kleinbaum 128
## 3 ucurtma avcisi 424 Khaled Hosseini 122
## yonetmen
## 1 Peter Weir
## 2 Peter Weir
## 3 Marc Forster
str() FONKSİYONU
# str() fonksiyonu sayesinde her bir gozlem ve degisken hakkinda bilgi sahibi olabiliriz. Ayrica df_2 orneginde df_2 nin data.frame oldugu da belirtilmis.
str(df_2)
## 'data.frame': 3 obs. of 3 variables:
## $ kitap_adi : Factor w/ 3 levels "marsli","olu ozanlar dernegi",..: 1 3 2
## $ sayfa_sayisi: num 416 424 136
## $ yazar : Factor w/ 3 levels "Andy Weir","Khaled Hosseini",..: 1 2 3
VERİ SEÇME
df_3[["film_suresi"]] # film_suresi verilerini vektor olarak verir
## [1] 140 122 128
df_3["film_suresi"] # film_suresi verileri data frame olarak verilir
## film_suresi
## 1 140
## 2 122
## 3 128
df_2[c("kitap_adi", "yazar")] # secilen degiskenleri data frame olarak verir
## kitap_adi yazar
## 1 marsli Andy Weir
## 2 ucurtma avcisi Khaled Hosseini
## 3 olu ozanlar dernegi N. H. Kleinbaum
# data frame icindeki degiskenlerin, gozlemlerini almak icin $ isareti kullanabiliriz.
df_2$kitap_adi
## [1] marsli ucurtma avcisi olu ozanlar dernegi
## Levels: marsli olu ozanlar dernegi ucurtma avcisi
df_2$sayfa_sayisi
## [1] 416 424 136
df_2$yazar
## [1] Andy Weir Khaled Hosseini N. H. Kleinbaum
## Levels: Andy Weir Khaled Hosseini N. H. Kleinbaum
# ayni zamanda
df_2[1] # secili data frame in 1. sutununun degerlerini verir
## kitap_adi
## 1 marsli
## 2 ucurtma avcisi
## 3 olu ozanlar dernegi
df_2[1, ] # secili data frame in 1. satirinin degerlerini verir
## kitap_adi sayfa_sayisi yazar
## 1 marsli 416 Andy Weir
df_2[ ,1] # secili dara frame in 1. sutununun degerlerini verir
## [1] marsli ucurtma avcisi olu ozanlar dernegi
## Levels: marsli olu ozanlar dernegi ucurtma avcisi
df_2[2,2] # secili data frame in 2. satir, 2. sutun degerini verir
## [1] 424
# ayni zamanda subset() fonksiyonlarini da kullanabiliriz
subset(df_2, select = kitap_adi) # bize df_2 data frame i icindeki kitap_adi degerlerini verir
## kitap_adi
## 1 marsli
## 2 ucurtma avcisi
## 3 olu ozanlar dernegi
subset(df_2, select = c(kitap_adi, yazar)) # subset() fonksiyonu ile birden fazla da degisken cekebiliriz
## kitap_adi yazar
## 1 marsli Andy Weir
## 2 ucurtma avcisi Khaled Hosseini
## 3 olu ozanlar dernegi N. H. Kleinbaum
subset(df_2, subset = (sayfa_sayisi>200)) # sayfa sayisi 200 den buyuk olan verileri yazdirir
## kitap_adi sayfa_sayisi yazar
## 1 marsli 416 Andy Weir
## 2 ucurtma avcisi 424 Khaled Hosseini
subset(df_2, select = c(kitap_adi, yazar), subset = (sayfa_sayisi<200)) # sayfa sayisi 200 den kucuk olan kitaplarin adini ve yazarini verir
## kitap_adi yazar
## 3 olu ozanlar dernegi N. H. Kleinbaum
** EKSİK VERİLERİ TEMİZLEME**
Data frame içindeki NA ile gösterilen veriler eksik veri olarak adlandırılır. Bu eksik verileri temizlemezsek çalışmalarımızda sorunlar çıkabilir.Özellikle büyük veriler ile çalıştığımızda işimiz daha zorlaşır. Eksik verileri temizleyerek yeni bir data frame oluşturmak istersek na.omit fonksiyonu kullanabiliriz.
df_5 <- data.frame(
ogrenci_isim = c("Ali", "Ayşe", "Berk", "Buse", "Cemal", "Ceyda"),
ogrenci_no = c(619, 215, NA, 911, 128, 397),
mat_notu = c(69, 95, 25, 86, 56, 99),
fizik_notu = c(56, 87, 12, 92, 18, 100),
kimya_notu = c(65, 93, NA, 88, NA, 95)
)
df_5
## ogrenci_isim ogrenci_no mat_notu fizik_notu kimya_notu
## 1 Ali 619 69 56 65
## 2 Ayşe 215 95 87 93
## 3 Berk NA 25 12 NA
## 4 Buse 911 86 92 88
## 5 Cemal 128 56 18 NA
## 6 Ceyda 397 99 100 95
df_6 <- na.omit(df_5)
df_6
## ogrenci_isim ogrenci_no mat_notu fizik_notu kimya_notu
## 1 Ali 619 69 56 65
## 2 Ayşe 215 95 87 93
## 4 Buse 911 86 92 88
## 6 Ceyda 397 99 100 95
df_6 da görüleceği üzere 3. ve 5. gözlemlerde eksik veriler oldugu icin bu gözlemleri temizledik ve df_6 ya atadık.
Ayrıca complete.cases() fonksiyonu ile NA olan veya olmayan verileri mantıksal operatörler ile görebiliriz. NA olan veriler TRUE, NA olmayan veriler ise FALSE olarak verilir. Bu fonksiyonu ayni zamanda matris ve vektörler üzerinde de uygulayabiliriz.
complete.cases(df_5) # eksik veri olan satirlar FALSE, olmayan satirlar icin TRUE degeri verdi
## [1] TRUE TRUE FALSE TRUE FALSE TRUE
# ayni fonksiyonu matris icin yapalim
df_7 <- as.matrix(df_5) # as.matrix ile data frame i matrix e donusturduk
class(df_7)
## [1] "matrix"
complete.cases(df_7)
## [1] TRUE TRUE FALSE TRUE FALSE TRUE
vektor <- as.vector(df_5$kimya_notu)
vektor
## [1] 65 93 NA 88 NA 95
class(vektor)
## [1] "numeric"
complete.cases(vektor)
## [1] TRUE TRUE FALSE TRUE FALSE TRUE
Data frame için hazırlamış olduğum çalışma bu kadar. İlgizin için teşekkür ederim. Önceki çalışmalarıma aşağıdaki linklerden ulaşabilirsiniz.
** Veri Görselleştirme **
https://tnchamza.wixsite.com/blog/home/r-ile-temel-veri-görselleştirme
** Vektörler **
https://tnchamza.wixsite.com/blog/home/r-ile-vektor-uygulamasi