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.33333Fungsi 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))Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Tantangan
SedangBuat 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:
- Buat kolom baru bernama
student_meanyang menyimpan nilai rata-rata. - Buat kolom baru bernama
is_above_meanyang menyimpan TRUE atau FALSE untuk menunjukkan apakah nilai siswa berada di atas atau di bawah rata-rata. - Buat kolom bernama
rankyang 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))
- Untuk menentukan peringkat, gunakan
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