Fungsi Jendela: lag, lead, cumsum
Hitung total berjalan, offset, dan agregat kumulatif dalam setiap kelompok.
Fungsi Jendela: lag, lead, cumsum adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Apa Itu Fungsi Jendela?
Fungsi jendela menghitung nilai relatif terhadap baris saat ini tanpa meringkas data. Berbeda dari summarize(), fungsi ini mempertahankan semua baris. Dalam dplyr, fungsi jendela digunakan di dalam mutate() — sering kali setelah group_by().
library(dplyr)
# Monthly revenue — we want to compare each month to previous
df <- data.frame(
month = 1:6,
revenue = c(100, 120, 95, 140, 160, 130)
)
print(df)lag() — Nilai Baris Sebelumnya
lag(x, n=1) mengembalikan nilai dari n baris sebelum baris saat ini. Baris pertama (atau beberapa baris pertama) akan bernilai NA. Fungsi ini ideal untuk menghitung perubahan dari satu periode ke periode berikutnya.
library(dplyr)
df <- data.frame(
month = 1:6,
revenue = c(100, 120, 95, 140, 160, 130)
)
df %>%
mutate(
prev_revenue = lag(revenue),
change = revenue - lag(revenue),
pct_change = round(100 * (revenue - lag(revenue)) / lag(revenue), 1)
)lead() — Nilai Baris Berikutnya
lead(x, n=1) mengembalikan nilai dari n baris setelah baris saat ini. Baris terakhir (atau beberapa baris terakhir) akan bernilai NA. Ini berguna untuk menghitung perbandingan nilai saat ini dengan nilai mendatang.
library(dplyr)
df <- data.frame(
month = 1:5,
revenue = c(100, 120, 95, 140, 160)
)
df %>%
mutate(
next_month = lead(revenue),
next_2_months = lead(revenue, n = 2),
will_increase = revenue < lead(revenue)
)cumsum() dan cumprod()
cumsum(x) menghitung total berjalan (jumlah kumulatif). cumprod(x) menghitung hasil kali kumulatif. Keduanya merupakan fungsi R dasar yang bekerja lancar di dalam mutate().
library(dplyr)
df <- data.frame(
month = 1:6,
revenue = c(100, 120, 95, 140, 160, 130)
)
df %>%
mutate(
running_total = cumsum(revenue),
growth_factor = round(cumprod(1 + (revenue - 100) / 100), 3)
)cummax() dan cummin()
cummax(x) melacak maksimum berjalan — nilai tertinggi yang terlihat sejauh ini. cummin(x) melacak minimum berjalan. Keduanya berguna untuk melacak titik tertinggi/terendah sepanjang waktu dan menganalisis penurunan.
library(dplyr)
df <- data.frame(
day = 1:7,
price = c(50, 52, 48, 55, 53, 58, 56)
)
df %>%
mutate(
all_time_high = cummax(price),
all_time_low = cummin(price),
drawdown_from_high = price - cummax(price)
)Peringkat row_number()
row_number() menetapkan peringkat bilangan bulat pada setiap baris. Saat digunakan setelah group_by(), fungsi ini memberi peringkat dalam setiap kelompok. Nilai yang sama mendapat peringkat berurutan berdasarkan urutan kemunculannya.
library(dplyr)
sales <- data.frame(
region = c('East','East','East','West','West','West'),
rep = c('Alice','Bob','Carol','Dave','Eve','Frank'),
revenue = c(200, 150, 180, 120, 190, 160)
)
sales %>%
group_by(region) %>%
mutate(rank = row_number(desc(revenue))) %>%
arrange(region, rank)ntile() — Membagi ke dalam Kelompok
ntile(x, n) membagi data ke dalam n kelompok yang kira-kira sama besar dan mengembalikan nomor kelompok (1 = terendah). Ini berguna untuk membuat kuartil, desil, atau kelompok persentil.
library(dplyr)
df <- data.frame(
customer = paste0('C', 1:10),
spend = c(50, 200, 75, 300, 125, 450, 25, 175, 100, 350)
)
df %>%
mutate(
quartile = ntile(spend, 4),
decile = ntile(spend, 10)
) %>%
arrange(spend)percent_rank() — Posisi Relatif
percent_rank(x) mengembalikan peringkat setiap nilai sebagai proporsi antara 0 dan 1. Nilai minimum mendapat 0, sedangkan maksimum mendapat 1. Fungsi ini menunjukkan posisi suatu nilai dibandingkan semua nilai lainnya.
library(dplyr)
df <- data.frame(
student = c('Alice','Bob','Carol','Dave','Eve'),
score = c(85, 92, 78, 95, 88)
)
df %>%
mutate(
pct_rank = round(percent_rank(score), 3),
top_pct = round(1 - percent_rank(score), 3)
) %>%
arrange(desc(score))Fungsi Jendela dalam Kelompok
Semua fungsi jendela menjadi memahami kelompok jika digabungkan dengan group_by(). Setiap kelompok memiliki jendela independen — lag/lead tidak melewati batas kelompok, cumsum dimulai ulang untuk setiap kelompok, dan pemeringkatan dilakukan dalam kelompok.
library(dplyr)
df <- data.frame(
product = c('A','A','A','B','B','B'),
month = c(1,2,3,1,2,3),
sales = c(100, 120, 110, 200, 180, 220)
)
df %>%
group_by(product) %>%
mutate(
mom_change = sales - lag(sales),
cumulative = cumsum(sales),
rank_in_product = row_number(sales)
)Menggabungkan Beberapa Fungsi Jendela
Anda dapat merangkai beberapa fungsi jendela dalam satu pemanggilan mutate() untuk membuat kolom analitis yang kaya. Hal ini membuat pipeline Anda mudah dibaca dan menghindari pemanggilan group_by() berulang.
library(dplyr)
stock <- data.frame(
date = as.Date(c('2024-01-01','2024-01-02','2024-01-03',
'2024-01-04','2024-01-05')),
close = c(150.2, 152.8, 149.5, 155.1, 157.3)
)
stock %>%
mutate(
prev_close = lag(close),
daily_return = round((close / lag(close) - 1) * 100, 2),
running_high = cummax(close),
distance_from_high = round(close - cummax(close), 2)
)lag() dengan Argumen default
lag(x, n=1, default=NA) menerima nilai default untuk mengisi posisi awal yang bernilai NA. Ini berguna saat Anda memerlukan dasar numerik, bukan nilai yang hilang, dalam kolom hasil perhitungan.
library(dplyr)
df <- data.frame(
week = 1:5,
visitors = c(500, 620, 480, 700, 650)
)
df %>%
mutate(
prev_week = lag(visitors, default = 0),
growth = visitors - lag(visitors, default = visitors[1])
)Pemeriksaan Singkat
Apa yang dikembalikan ntile(x, 4) untuk nilai minimum dalam x?
Ringkasan: Fungsi Jendela
Inti pembelajaran tentang fungsi jendela dalam dplyr:
lag(x, n)— nilai n baris sebelum baris saat ini;lead(x, n)— nilai n baris setelahnyacumsum()— total berjalan;cumprod()— hasil kali berjalancummax()/cummin()— maksimum / minimum berjalanrow_number()— peringkat bilangan bulat dalam kelompokntile(x, n)— membagi ke dalam n kelompok (1=terendah, n=tertinggi)percent_rank(x)— peringkat pecahan antara 0 dan 1- Semua fungsi jendela memahami kelompok jika digabungkan dengan
group_by()
library(dplyr)
# Comprehensive window function example
data.frame(
region = c('East','East','East','West','West','West'),
month = c(1,2,3,1,2,3),
sales = c(100, 130, 120, 200, 190, 210)
) %>%
group_by(region) %>%
mutate(
mom_chg = sales - lag(sales),
running_total = cumsum(sales),
rank = row_number(desc(sales))
) %>%
ungroup()Pertanyaan yang Sering Diajukan
Apakah pelajaran “Fungsi Jendela: lag, lead, cumsum” gratis?
Ya — teks lengkap “Fungsi Jendela: lag, lead, cumsum” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Fungsi Jendela: lag, lead, cumsum”?
Hitung total berjalan, offset, dan agregat kumulatif dalam setiap kelompok. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Fungsi Jendela: lag, lead, cumsum” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Ringkasan Berkelompok dan group_by()
- Fungsi Jendela: lag, lead, cumsum
- Join Banyak Tabel dalam dplyr
- Evaluasi Rapi: {{ }} dan .data