6. Veri Çerçeveleri (Data Frames) Oluşturma

R’ın yaygın kullandığı yapısal formattır. Environment’ta bağımsız halde duran vektörlerin Excel veya SPSS formatı gibi satırlar ve sütunlar halinde birbirine konuşan tablo formatına dönüştürülmesine Data Frame denir. Önemli kural: Birleştirilecek vektörlerin gözlem sayılarının (uzunluklarının) kesinlikle birbirine eşit olması gerekir. Eksik olanlara NA yazılmalıdır.

# Karakter (String) vektör oluşturma: Tırnak işareti içinde yazılmalıdır.
ad <- c("Ali", "Emrullah", "Ege")

# Sayısal (Numeric) vektör oluşturma:
yas <- c(26, 27, 25)

# Mantıksal (Logical) vektör oluşturma:
r_stat <- c(TRUE, FALSE, TRUE)

# Eksik/Bilinmeyen veri (NA):
car <- c(NA, NA, NA)

ID <- c(1, 2, 3)

# Veri seti oluşturma fonksiyonu: data.frame() 
ogrenci <- data.frame(ID, ad, yas, r_stat, car)

# Alternatif olarak sütun bazlı birleştirme (Column Bind):
ogrenci1 <- cbind(ID, ad, yas, r_stat, car)

# data.frame ile yapılanı görüntüleyelim.
print(ogrenci)
##   ID       ad yas r_stat car
## 1  1      Ali  26   TRUE  NA
## 2  2 Emrullah  27  FALSE  NA
## 3  3      Ege  25   TRUE  NA
# cbind ile yaptığımı görüntüleyelim - lütfen dataframe ile yapılanı kullanınız.
print(ogrenci1)
##      ID  ad         yas  r_stat  car
## [1,] "1" "Ali"      "26" "TRUE"  NA 
## [2,] "2" "Emrullah" "27" "FALSE" NA 
## [3,] "3" "Ege"      "25" "TRUE"  NA
remove(ogrenci1) # Environment'tan kaldırmak istedik.

Oluşturduğumuz ogrenci data frame’ini aşağıdaki yolla görebiliriz.

7. Veri Çerçeveleri İçerisinde İşlem Yapmak ve Dolar ($) Operatörü

R’da veri analizi neredeyse tamamen data frame yapısı üzerinden yapılır. Bir data frame, satır (gözlem) ve sütun (değişken) şeklinde organize edilmiş tablo yapısındaki en temel veri nesnesidir. Her sütun farklı bir veri tipinde vektör olabilir (sayısal, karakter, mantıksal vb.). Data frame içindeki bir değişkene $ operatörü ile erişilir. R’ın en büyük avantajlarından biri, aynı çalışma ortamında (Environment) birden fazla data frame’i aynı anda tutabilmesidir. Bu sayede farklı veri setleri arasında kolayca geçiş yapılabilir. Analiz yaparken hangi data frame’den hangi değişkeni kullandığımızı açıkça belirtmek zorunludur.

Özetle; Data frame yapısında birden çok veri seti aynı environment’ta açık olabileceğinden, belirli bir değişkenle işlem yapmak istendiğinde onun hangi data frame içinde olduğunu belirtmek şarttır. Bunun için $ operatörü kullanılır.

mean(ogrenci$yas)   # ogrenci veri setinin içindeki yaş değişkeninin ortalamasını alır
## [1] 26
ogrenci$ad          # ogrenci veri setinin içindeki adlarını getirir
## [1] "Ali"      "Emrullah" "Ege"
ogrenci$ad[1]       # ogrenci veri setinin içindeki adların 1.sini getirir.
## [1] "Ali"
ogrenci$ad[c(1,3)]  # ogrenci veri setinin içindeki 1. ve 3. adı getirir
## [1] "Ali" "Ege"
ogrenci$ad[1:3]     # ogrenci veri setinin içindeki 1 ile 3. arasınıdaki adları getirir. (3. ad dahil)
## [1] "Ali"      "Emrullah" "Ege"
# Data frame'e yeni bir sütun ekleme
ogrenci$mat <- c(78, 65, 98)   # ogrenci datasına 'mat' isimli matematik puanı vektörünü kolon olarak kaydeder

# Güncellenmiş veri setini görelim
print(ogrenci)
##   ID       ad yas r_stat car mat
## 1  1      Ali  26   TRUE  NA  78
## 2  2 Emrullah  27  FALSE  NA  65
## 3  3      Ege  25   TRUE  NA  98
# Data frame'i Script alanında hemen görmek için
View(ogrenci)

8. Eksik Veriler (NA) ile Hesaplama ve Yuvarlama

İçerisinde NA olan bir sayısal veri setinin ortalaması doğrudan mean() ile alınamaz, sistem NA döndürür. Hesabın yapılabilmesi için NA değerlerinin dışarıda bırakılması (remove edilmesi) gerekir.

ogrenci$ist_skor <- c(88, 66, NA)

# NA varken ortalama almayı deneyelim (Sonuç NA olacaktır)
mean(ogrenci$ist_skor)
## [1] NA
# NA verisini göz ardı etmek için 'na.rm = TRUE' argümanı kullanılır
mean(ogrenci$ist_skor, na.rm = TRUE)
## [1] 77
# Ondalık Değerleri Yuvarlama (Round)
A <- mean(ogrenci$ist_skor, na.rm = TRUE)
round(A, 2)   # Çıkan sonucun ondalık kısmını virgülden sonra 2 hane kalacak şekilde yuvarlar
## [1] 77

9. Metin (String) Birleştirme İşlemleri

Bağımsız kelimeleri, ad-soyad bilgilerini birleştirmek veya e-posta adresi gibi yapılar üretmek için paste() fonksiyonu kullanılır.

soyad <- c("Cebe", "Atik", "Turan")

# Ad ve soyadı arasında boşluk bırakarak birleştirir: Ali Cebe
ad_soyad <- paste(ad, soyad)
ad_soyad
## [1] "Ali Cebe"      "Emrullah Atik" "Ege Turan"
# Harfleri küçük harfe çevirerek e-posta birleşimi yapma
# Boşluksuz birleşim: alicebe
kucukharf <- paste0(tolower(ad), tolower(soyad))
kucukharf
## [1] "alicebe"      "emrullahatik" "egeturan"
# Email uzantısını kendimiz atıyoruz ("@" ile): alicebe@verianaliziokulu.edu
email <- paste0(kucukharf, "@verianaliziokulu.edu.tr")
email
## [1] "alicebe@verianaliziokulu.edu.tr"     
## [2] "emrullahatik@verianaliziokulu.edu.tr"
## [3] "egeturan@verianaliziokulu.edu.tr"
email_tekkomut <- paste0(tolower(ogrenci$ad),tolower(ogrenci$soyad),"@verianaliziokulu.edu.tr") # tek seferde böyle yazardık.
email_tekkomut
## [1] "ali@verianaliziokulu.edu.tr"      "emrullah@verianaliziokulu.edu.tr"
## [3] "ege@verianaliziokulu.edu.tr"