Sayısal Vektörler

R’da sayıların türlerine göre farklı gösterimler olabilmektedir.

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.

Birbirine eşit olmayan vektörlerde işlemler

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

Indeksler

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)]

  1. elemanı eklemek için :

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)**

Alıştırma

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.

Rasgele Veri Oluşturma

Karakter Nesneler

paste(ad,soyad) : ad soyad

paste(ad,soyad, sep=““) : adsoyad

Nesne Oluşturma II

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

Eleman Seçme

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.

kendinizi test edin

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