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.
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)
İç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
Bağımsız kelimeleri, ad-soyad bilgilerini birleştirmek veya e-posta
adresi gibi yapılar üretmek için paste()
fonksiyonu kullanılır.
paste(): Kelimeleri aralarında standart birer boşluk
bırakarak birleştirir.paste0() (paste zero): Kelimeleri arasında hiçbir
boşluk (space) bırakmadan birleştirir.tolower() / toupper(): Karakterleri
küçük/büyük harfe dönüştürü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"