R’da sayıların türlerine göre farklı gösterimler olabilmektedir.
vektör (vector) : c(1, 2, 3)
Karakter (character) c(“reyhan”)
Sayısal (numeric)
karmaşık sayı (complex) : ??
Mantıksal (logical) : c(TRUE,TRUE,FALSE)
Faktör (factor) :
Bu vektörlerin türünü öğrenmek için typeof() fonksiyonunu kullanabilirsiniz.
vektor <- c(TRUE,TRUE,FALSE)
typeof(vektor)
class(), mode() ya da typeof() fonksiyonları ile de verinin türünü öğrenebilirsiniz. Hocam chatgpt’ye sordum ama açıklamasını pek anlamadım hepsi aynı gibi geldi.
Bir vektörde kaç tane nesne olduğunu öğrenmek için lenght() fonksiyonunu kullanabilirsiniz.
lenght(vektor)
NOT
== ve = farklı anlamlar taşır. tek =, matematiksel eşitlik anlamına gelir. iki ==, soru anlamı taşır. yani eşit midir gibi yargıda bulunur.Örnek:
a <- c(1,2)
b <- c(3, 7, 8)
lenght(a)==lenght(b) (a vektörü b vektörüne eşit midir?)
Her bir işlev veya fonksiyon için farklı yollar olabilir. Vektör uzunluklarını karşılaştırmak için alternatif yöntem:
lenght(a)/lenght(b) ile de sonucu kontrol edebilirsiniz.
Uzunlukları eşit olmayan iki vektör arasında işlem yapmak istediğimizde, kısa vektör, uzun vektörle eşitlenene kadar kendini tekrarlar örnek:
x vektörü: 1 2 3 4 5
y vektörü: 1 2 (R bu vektörü tekrarlayarak, 1 2 1 2 1 yapar)
x+y = 2, 4, 4, 6, 6
bir karakter vektörümüz olsun:
ad <- c(“Ali”,“Elif”,“Su”,“Deniz”,“Aras”, “Berk”,“Can”,“Ece”,“Efe”,“Arda”)
ikinci elemanı seçmek için ad[2]
üçüncü elemanı çıkarmak için ad[-3]
birden fazla eleman olduğunda bunu yine vektör olarak ifade etmeliyiz. Mesela 2. ve 3. elaman görünmesin istiyoruz. 2. ve 3. elemanları bir vektör olarak ifade edelim
c(2, 3)
ardından bu vektörü yazdırmaka istemediğimiz için önüne “eksi” koyarak köşeli paranteze alalım:
ad[-c(2,3)]
ad[11] <- “Asu” yazabilirsiniz. Ama sonucu göremezsiniz. Ekelnemiş sonucu görmek için :
ad[11] <- “Asu”, ad yazabilirsiniz.
Vektöre bir nesneden sonra yeni bir nesne eklemek için append kullanılır. Argümanları : append(vektör adı, eklenecek değer, after = şu nesneden sonra eklensin)**
ad <- c(“Ali”,“Elif”,“Su”,“Deniz”,“Aras”, “Berk”,“Can”,“Ece”,“Efe”,“Arda”) boy <- c(160,165,170,155,167,162,169,158,160,164) kilo <-c(50,55,57,50,48,65,58,62,45,47)
burada isimlerle boyları alt alta incelemek istersek, boy vektörünü ad vektöründen isimelndirmemiz lazım yani:
names(boy) <- ad (boyları adlarla eşleştirdik)
boy yazarsak çıktı:
boy Ali Elif Su Deniz Aras Berk Can Ece Efe Arda 160 165 170 155 167 162 169 158 160 164
seq() fonksiyonu başlangıcı ve bitişi ve nesne sayısı belli sayı dizisi oluşturmayı sağlar.
seq(başlangıç, bitiş, sayı adeti)
seq(from = , to = , length.out = )
veya
seq(from=1,to=3,by=artış miktarı)
rep() fonksiyonu
vektörün tekrar ettirilmesi için kullanılır.
rep(c(3,4,5), 3) c vektörü 3,4,5,3… şeklinde tekrar eder.
a <- c(3,5,7) rep(a, each = 3) a vektörü, 3,3,3,5,5,5,7,7,7 şeklinde tekrar eder.
rep(1:3,c(1,2,3)) = rep(1:3, 1:3)
çıktı: 1,2,2,3,3,3
paste() fonksiyonu
karater çıktılar verir.
paste(“test”,1:10,“…”,sep=“_” “test” yazısını on kez tekrar yazar ve her seferinde virgülden sonra belirtilen sayıları yanına ekler. sep, argümanı ile iki karater arasında istenilen sembol yerleştirilebilir.
sample(x, size, replace = FALSE, prob = NULL)
runif(n, min = 0, max = 1) Belirli bir aralıktaki uniform (eşit olasılıkla dağılan) rastgele sayılar üretir. Her sayı aynı olasılıkla seçilir.
rnorm(n, mean = 0, sd = 1) normal dağılım gösterir
paste(ad,soyad) : ad soyad
paste(ad,soyad, sep=““) : adsoyad
m1 <- matrix(1:12, ncol = 3, nrow = 4) : burada 3 sütun ve 4 satır vardır. 1’den 12’ye kadar olan sayılar ise birinci sütundan başlayarak yukarrıdan aşağıya doğru doldurulur.
matrix(1:12, ncol = 3, nrow = 4, byrow = TRUE)
byrow= TRUE kullanılırsa matris, satır sırasına göre dolrulur.
t(m1) : m1 matrisinin transpozu alınır.
data.frame() fonksiyonu ile aynı uzunluktaki vektörlerden bir veri seti oluşturulabilir.
data.frame(ad,boy, kilo, beden) ile ad, boy, kilo ve beden vektörleri tablo şeklinde yukarıdan aşağıya doğru listelenir.
NOT
Uzunlukları birbirine eşit olmayan vektörler ile veri seti oluşturma:
Hazır veri seti kullanma
install.packages(“datasets”) library (datasets)
data(cars) : cars veri setini incelemek için kullanabilirsiniz. Enviromente’a eklenir.
İnceleme
dim(cars) : Dimension (Boyut), çıktısı sırayla satır ve sütun
nrow(cars) : satır sayısını verir
ncol(cars) : sütun sayısını verir
head() : ilk 6 satır
tail() : son 6 satır
View() : veri seti incelenir
df(satır = , sütun= ) df: veri seti
df[1,] : birinci satırın hepsi
df[,1] : birinci sütun hepsi
** Önemli Not **
Veri setlerinde satır elemanları yazdırıldığında veri seti (data.frame), sütun elemanları yazdırıldığında ise vektör (vector) oluşmaktadır.
Nedeni: veri setleri iki boyutludur. Vektörler tek boyutludur.
df[,1,drop=FALSE] : sütun seçilse de veri seti olarak görünür.
subset(veriseti, kosul/Kosullar)
subset(airquality, Temp > 90,select = c(Ozone, Temp)) : hava sıcaklığının 90’dan fazla olduğu Ozno ve Temp sütunlarını listeler.
ogrenci <- c(ogrenci1, ogrenci2,ogrenci3,ogrenci4, ogrenci5) vize <- c(50, 55,60, 70, 80) final <- c(45, 65, 85, 90,85)
ogrenci <- c("ogrenci1", "ogrenci2","ogrenci3","ogrenci4", "ogrenci5")
vize <- c(50, 55,60, 70, 80)
final <- c(45, 65, 85, 90,85)
gecmenotu <- c((vize+final)/2)
summary(gecmenotu)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 47.5 60.0 72.5 68.5 80.0 82.5
toplam <- function(n){
(n*(n+1))/2
}
chatgpt yaptı ama anladım
toplam <- function() {
# Kullanıcıdan bir sayı al ve NA kontrolü yap
n <- as.integer(readline(prompt = "Kaça kadar olan sayıların toplamı hesaplansın: "))
# Girdi geçerli mi kontrol et (NA ise uyarı ver ve çık)
if (is.na(n) || n < 1) {
cat("Lütfen geçerli bir pozitif tam sayı giriniz.\n")
return()
}
# 1'den n'e kadar olan sayıların toplamını hesapla
toplam <- sum(1:n)
# Sonucu ekrana yazdır
cat(sprintf("1'den %d'e kadar olan sayıların toplamı: %d\n", n, toplam))
}
# Fonksiyonu çağır
toplam()
## Kaça kadar olan sayıların toplamı hesaplansın:
## Lütfen geçerli bir pozitif tam sayı giriniz.
## NULL
bos_veri <- data.frame(
TamSayi = integer(), # Tam sayı (int)
OndalikSayi = numeric(), # Ondalık sayı (num)
Karakter = character(), # Karakter (chr)
Mantiksal = logical(), # Mantıksal (logi)
Faktor = factor()
)
str(bos_veri)
## 'data.frame': 0 obs. of 5 variables:
## $ TamSayi : int
## $ OndalikSayi: num
## $ Karakter : chr
## $ Mantiksal : logi
## $ Faktor : Factor w/ 0 levels:
ad <- c('Su','Pera','Sule','Can','Cem','Name','Aras','Mete','Kaan','Pelin')
puan <- c(12.5, 9, 16.5, 12, 9, 20, 14.5, 13.5, 8, 19)
deneme <- c(1, NA, 2, NA, 2, NA, 1, NA, 2, 1)
bonus <- c(1,0,1, 0, 0, 1, 1, 0,0, 1)
yeni_veri <- data.frame(ad, puan, deneme, bonus)
yeni_veri
## ad puan deneme bonus
## 1 Su 12.5 1 1
## 2 Pera 9.0 NA 0
## 3 Sule 16.5 2 1
## 4 Can 12.0 NA 0
## 5 Cem 9.0 2 0
## 6 Name 20.0 NA 1
## 7 Aras 14.5 1 1
## 8 Mete 13.5 NA 0
## 9 Kaan 8.0 2 0
## 10 Pelin 19.0 1 1
eksik_veri <- sum(is.na(yeni_veri$deneme))
eksik_veri
## [1] 4
Kitap Bölüm2 Ödevi
Soru 1
isim <- c(“Ali”,“Defne”, “Meltem”, “Semih”,“Sevda”,“Gizem”,“Emre”,“Zeynep”,“Utku”,“Beril”) vize <- c(60,70,50,80,65,70,85,70,92,80) final <- c(70,65,50,45,67,75,80,85,95,85)
names(vize) <- isim vize names(final)<- isim final
vize[c(“Ali”,“Beril”)] final[c(“Ali”, “Beril”)]
ortalama <- (vize+final)/2 ortalama std_sapma_vize <- sd(vize) std_sapma_vize std_sapma_final <- sd(final) std_sapma_final
min(vize) min(final) max(vize)
max(final) median(vize) median(final)
subset(isim, vize>90) subset(isim, final>90)
subset(isim, vize<50 | final <50)
final_yuksek <- subset(isim, final>vize) final_yuksek
dersi_gecen <- final >= 50 vize_y <- vize[dersi_gecen] vize_y final_y <- final[dersi_gecen] final_y
length(final_y) length(vize_y)
which.max(vize) which.max(final)
vize_toplam <- sum(vize) vize_toplam final_toplam <- sum(final) final_toplam
not <- (final0.6) + (vize0.4) not mean(not) sd(not)
not_s <- sort(not, decreasing = TRUE) not_s
str(isim) str(vize) str(final) str(ortalama) str(final_yuksek) str(final_y)
ort_buyuk <- subset(isim, not>mean(not)) ort_buyuk
subset(isim, not==66) subset(isim, not==72) subset(isim, not==88)
Soru 2
round(seq(from=1, to=20, length.out=40),2)
Soru 3
paste(“ogrenci”, 1:10, sep=“_“)
x <- c(10, 15, 25, 50, 100) rep(x, c(3,5, 1, 4, 3))
y <- c(1:3) rep(y, c(10:12))
Soru 4
cins <- c(“Erkek”, “K??z”, “K??z”, “Erkek”, “K??z”, “K??z”, “Erkek”, “K??z”, “Erkek”, “K??z”) cins <- factor(cins) sayisal_cins <- as.numeric(cins) sayisal_cins karakter_cins <- as.character(cins) karakter_cins
Soru 5
?cut harf_not <- cut(not, breaks = c(-Inf, 49, 59, 69, 79, 89, 100), labels = c(“F”, “E”, “D”, “C”, “B”, “A”), right = TRUE) harf_not<- factor(harf_not) harf_not str(harf_not)
Soru 6
matris <- cbind(Vize = vize, Final = final, Gecme_Notu = not) matris
ortalamalar<-colMeans(matris) matris_yeni<- rbind(matris, ortalamalar) matris_yeni
matris<-cbind(matris, Harf_notu = harf_not) matris