Menu
Coddy logo textTech

Özel Fonksiyonlar

Coddy'nin R'da Veri Manipülasyonu kursunda ders 14 / 14.

R'daki özel fonksiyonlar, yeniden kullanılabilir kod oluşturmak ve karmaşık veri dönüşümleri gerçekleştirmek için güçlü araçlardır. Bir dizi işlemi tek bir çağrılabilir birimde toplamanıza olanak tanırlar. Veri manipülasyonu görevleri için özel fonksiyonların nasıl oluşturulacağını ve kullanılacağını keşfedelim.

Özel Bir Fonksiyonun Temel Yapısı

R'da özel bir fonksiyon oluşturmak için temel sözdizimi şöyledir:

function_name <- function(arg1, arg2, ...) {
  # Fonksiyon gövdesi
  # arg1, arg2 vb. kullanılarak yapılan işlemler
  return(result)
}

Basit Bir Özel Fonksiyon Oluşturma

Bir vektördeki eksik değerlerin yüzdesini hesaplayan basit bir fonksiyon oluşturalım:

percent_missing <- function(x) {
  sum(is.na(x)) / length(x) * 100
}

# Kullanım
data <- c(1, 2, NA, 4, NA, 6)
percent_missing(data)  # Döndürür: 33.33333

Birden Fazla Argümanlı Fonksiyonlar

Özel fonksiyonlar, daha esnek işlemlere olanak tanıyacak şekilde birden fazla argüman alabilir:

scale_column <- function(df, column_name, min_val = 0, max_val = 1) {
  df[[column_name]] <- (df[[column_name]] - min(df[[column_name]], na.rm = TRUE)) / 
                       (max(df[[column_name]], na.rm = TRUE) - min(df[[column_name]], na.rm = TRUE))
  df[[column_name]] <- df[[column_name]] * (max_val - min_val) + min_val
  return(df)
}

# Kullanım
df <- data.frame(x = 1:10, y = 11:20)
scaled_df <- scale_column(df, "x", 0, 100)

Birden Fazla Değer Döndürme

Fonksiyonlar bir liste kullanarak birden fazla değer döndürebilir:

summarize_numeric <- function(x) {
  list(
    mean = mean(x, na.rm = TRUE),
    median = median(x, na.rm = TRUE),
    sd = sd(x, na.rm = TRUE)
  )
}

# Kullanım
numbers <- c(1, 2, 3, 4, 5)
summary_stats <- summarize_numeric(numbers)

dplyr ile Özel Fonksiyonları Kullanma

Özel fonksiyonlar, veri manipülasyonu için dplyr ile birleştirildiğinde özellikle yararlı olabilir:

library(dplyr)

categorize_age <- function(age) {
  case_when(
    age < 18 ~ "Child",
    age < 65 ~ "Adult",
    TRUE ~ "Senior"
  )
}

# dplyr ile kullanım
df <- data.frame(name = c("Alice", "Bob", "Charlie"), age = c(25, 72, 16))
df %>%
  mutate(age_category = categorize_age(age))
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

challenge icon

Görev

Orta

Öğrenci sınav puanlarından oluşan bir veri setinde her öğrenci için ortalama puanı hesaplayan mean_score adında özel bir fonksiyon oluşturun.

Her satır boyunca ortalama puanı hesaplamak için rowwise() fonksiyonunu kullanacağız ve daha sonra her şeyi eski haline getirmek için ungroup() fonksiyonunu kullanacağız. Sağlanan kodu inceleyin.

Aşağıdaki işlemleri gerçekleştirin:

  1. Ortalama puanı tutan student_mean adında yeni bir sütun oluşturun.
  2. Öğrencinin ortalamanın üstünde mi yoksa altında mı olduğuna göre TRUE veya FALSE değerini tutan is_above_mean adında yeni bir sütun oluşturun.
  3. Ortalamalarına göre her öğrencinin diğerlerine göre yerini tutan rank adında bir sütun oluşturun. Örneğin, 1 öğrencinin en iyisi olduğu, 2 öğrencinin en iyi ikinci olduğu anlamına gelir, vb.
    • Sıralamayı bulmak için order() kullanın: order(order(mean_col, decreasing = TRUE))

Kendin dene

# Girdiyi oku
con <- file("stdin", "r")
input_data <- readLines(con)
close(con)

# Girdi verilerini bir veri çerçevesine (data frame) işle
data <- read.csv(text = input_data, header = TRUE, stringsAsFactors = FALSE)

# mean_score fonksiyonunu tanımla
mean_score <- function(data) {
  # TODO: Kodunuzu buraya yazın
  # tüm derslerin ortalamasını hesapla

  return(result)
}

# TODO: Kodunuzu buraya yazın
# Ortalama puanı tutan student_mean adında yeni bir sütun oluşturun.
# Öğrencinin ortalamanın üstünde mi yoksa altında mı olduğunu TRUE veya FALSE olarak tutan is_above_mean adında yeni bir sütun oluşturun.
# Her öğrencinin ortalamasına göre diğerlerine kıyasla yerini tutan rank adında bir sütun oluşturun. Örneğin, 1 öğrencinin en iyisi olduğu, 2 öğrencinin ikinci en iyi olduğu anlamına gelir.

# Sonucu yazdır
print(data)

R'da Veri Manipülasyonu bölümündeki tüm dersler