Menu
CoddyTech

Fungsi Kustom

Pelajaran 14 dari 14 dalam kursus Manipulasi Data dengan R di Coddy.

Fungsi kustom di R adalah alat yang andal untuk membuat kode yang dapat digunakan kembali dan melakukan transformasi data yang kompleks. Fungsi ini memungkinkan kamu mengemas serangkaian operasi ke dalam satu unit yang dapat dipanggil. Mari kita pelajari cara membuat dan menggunakan fungsi kustom untuk tugas manipulasi data.

Struktur Dasar Fungsi Kustom

Sintaks dasar untuk membuat fungsi kustom di R adalah:

function_name <- function(arg1, arg2, ...) {
  # Isi fungsi
  # Operasi yang menggunakan arg1, arg2, dan sebagainya.
  return(result)
}

Membuat Fungsi Kustom Sederhana

Mari kita buat fungsi sederhana yang menghitung persentase nilai yang hilang dalam sebuah vektor:

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

# Penggunaan
data <- c(1, 2, NA, 4, NA, 6)
percent_missing(data)  # Mengembalikan: 33.33333

Fungsi dengan Beberapa Argumen

Fungsi kustom dapat menerima beberapa argumen, sehingga memungkinkan operasi yang lebih fleksibel:

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

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

Mengembalikan Beberapa Nilai

Fungsi dapat mengembalikan beberapa nilai menggunakan list:

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

# Penggunaan
numbers <- c(1, 2, 3, 4, 5)
summary_stats <- summarize_numeric(numbers)

Menggunakan Fungsi Kustom dengan dplyr

Fungsi kustom bisa sangat berguna saat digabungkan dengan dplyr untuk manipulasi data:

library(dplyr)

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

# Penggunaan dengan dplyr
df <- data.frame(name = c("Alice", "Bob", "Charlie"), age = c(25, 72, 16))
df %>%
  mutate(age_category = categorize_age(age))
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

challenge icon

Tantangan

Sedang

Buat fungsi khusus bernama mean_score yang menghitung nilai rata-rata setiap siswa dari dataset nilai ujian siswa.

Untuk menghitung nilai rata-rata setiap baris, kita akan menggunakan fungsi rowwise(), lalu menggunakan ungroup() untuk mengembalikan semuanya ke kondisi semula. Periksa kode yang diberikan.

Lakukan tindakan berikut:

  1. Buat kolom baru bernama student_mean yang menyimpan nilai rata-rata.
  2. Buat kolom baru bernama is_above_mean yang menyimpan TRUE atau FALSE untuk menunjukkan apakah nilai siswa berada di atas atau di bawah rata-rata.
  3. Buat kolom bernama rank yang menyimpan peringkat setiap siswa dibandingkan dengan siswa lainnya berdasarkan nilai rata-ratanya. Misalnya, 1 berarti siswa tersebut adalah yang terbaik, 2 berarti siswa tersebut terbaik kedua, dan seterusnya.
    • Untuk menentukan peringkat, gunakan order(): order(order(mean_col, decreasing = TRUE))

Coba sendiri

# Baca input
con <- file("stdin", "r")
input_data <- readLines(con)
close(con)

# Olah data input menjadi data frame
data <- read.csv(text = input_data, header = TRUE, stringsAsFactors = FALSE)

# Definisikan fungsi mean_score
mean_score <- function(data) {
  # TODO: Tulis kodemu di sini
  # hitung rata-rata semua mata pelajaran

  return(result)
}

# TODOL Tulis kodemu di sini
# Buat kolom baru bernama student_mean yang berisi nilai rata-rata.
# Buat kolom baru bernama is_above_mean yang berisi TRUE atau FALSE berdasarkan apakah nilai siswa di atas atau di bawah rata-rata.
# Buat kolom bernama rank yang menunjukkan peringkat setiap siswa berdasarkan nilai rata-ratanya. Misalnya, 1 berarti siswa tersebut yang terbaik, 2 berarti siswa tersebut terbaik kedua, dan seterusnya.

# Cetak hasilnya
print(data)

Semua pelajaran di Manipulasi Data dengan R

Latihan sendiri: Compiler R online