R Markdown: Laporan Analisis yang Bisa Diulang Setiap Bulan
TL;DR
R Markdown adalah format file yang nyampur teks laporan dan kode R di satu dokumen, lalu diubah jadi HTML, Word, atau PDF lewat proses knit. Angka dan grafik di laporannya dihitung ulang tiap kali file dijalankan, jadi laporan bulanan cukup diganti parameter tanggalnya. Ini nghilangin kesalahan copy paste yang paling sering muncul di laporan berulang.
R Markdown itu file yang isinya campuran teks laporan dan kode R. Waktu dijalankan, kodenya dieksekusi dan hasilnya langsung nempel di dokumen jadi.
Manfaat utamanya bukan kerennya. Manfaatnya: bulan depan kamu ganti satu baris tanggal, dan seluruh laporan terbit ulang dengan angka baru.
Aku dulu ngerjain laporan penjualan bulanan dengan cara ekspor, tempel ke Word, ganti angka manual. Rata-rata 2 jam 40 menit per bulan, dan minimal sekali setahun ada angka yang kelewat diganti.
Apa itu R Markdown?
R Markdown adalah format dokumen yang menggabungkan teks biasa dengan blok kode R di file berekstensi .Rmd. Waktu kamu tekan tombol Knit, R jalanin semua kodenya secara urut, lalu nyusun hasilnya (angka, tabel, grafik) jadi satu dokumen HTML, Word, atau PDF. Karena angkanya dihitung ulang tiap kali, laporan kamu nggak mungkin ketinggalan versi lama.
Tiga bagian yang selalu ada: header YAML di paling atas, teks naratif, dan code chunk.
Langkah 1: siapkan alatnya
Install R dan RStudio, lalu paket yang dibutuhkan:
install.packages(c("rmarkdown", "knitr", "tidyverse", "scales"))
Buat laporan Word, cukup itu. Buat PDF, kamu perlu tambahan mesin LaTeX:
install.packages("tinytex")
tinytex::install_tinytex()
Saranku mulai dari HTML dulu. Paling cepat di-knit, dan tabel panjang tetap kebaca tanpa kepotong halaman.
Langkah 2: bikin file .Rmd pertama
Di RStudio, klik File, New File, lalu R Markdown. Isi judul dan pilih HTML.
Bagian paling atas namanya header YAML. Ganti isinya jadi:
---
title: "Laporan Penjualan Bulanan"
author: "Tim Data"
date: "`r format(Sys.Date(), '%d %B %Y')`"
output:
html_document:
toc: true
toc_float: true
theme: flatly
params:
bulan: "2025-10"
---
Dua baris yang paling berguna di sini: toc: true yang bikin daftar isi otomatis, dan blok params yang nyimpan bulan laporan. Blok params itu kunci laporan bulanan.
Langkah 3: pahami code chunk
Code chunk itu blok kode yang dibuka dan ditutup dengan tiga backtick.
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE)
library(tidyverse)
library(scales)
```
Opsi yang paling sering dipakai:
| Opsi | Artinya | Kapan dipakai |
|---|---|---|
echo = FALSE | Kode nggak ditampilkan, hasilnya iya | Laporan buat atasan |
include = FALSE | Kode jalan tapi nggak ada yang muncul | Chunk persiapan data |
message = FALSE | Sembunyikan pesan paket | Hampir selalu |
fig.width, fig.height | Ukuran grafik dalam inci | Grafik kekecilan atau kegedean |
eval = FALSE | Kode ditampilkan tapi nggak dijalankan | Contoh kode di dokumentasi |
Baris opts_chunk$set() di chunk setup nerapin opsi itu ke seluruh dokumen, jadi kamu nggak perlu nulis ulang di tiap chunk.
Langkah 4: masukkan data dan hitung angkanya
```{r baca-data}
transaksi <- read_csv("data/transaksi_toko_berkah.csv") |>
mutate(bulan = format(tanggal, "%Y-%m")) |>
filter(bulan == params$bulan)
omzet <- sum(transaksi$total)
jml_struk <- nrow(transaksi)
rata_struk <- omzet / jml_struk
```
Perhatikan params$bulan. Nilainya diambil dari header YAML, jadi ganti sekali di atas dan seluruh laporan ikut berubah.
Langkah 5: sisipkan angka ke dalam kalimat
Ini bagian yang bikin R Markdown beda dari sekadar script. Kamu bisa naruh angka langsung di tengah paragraf pakai kode sebaris.
Omzet bulan ini `r comma(omzet, prefix = "Rp ")` dari
`r comma(jml_struk)` transaksi, dengan rata-rata
`r comma(round(rata_struk), prefix = "Rp ")` per struk.
Hasilnya di dokumen jadi kalimat biasa: "Omzet bulan ini Rp 1.420.000.000 dari 18.400 transaksi, dengan rata-rata Rp 77.174 per struk."
Nggak ada lagi angka di paragraf yang lupa diperbarui. Itu satu-satunya alasan yang aku butuh buat pindah dari Word.
Langkah 6: tambahkan tabel dan grafik
```{r tabel-cabang}
ringkas <- transaksi |>
group_by(cabang) |>
summarise(
omzet = sum(total),
transaksi = n(),
rata_rata = round(sum(total) / n())
) |>
arrange(desc(omzet))
knitr::kable(
ringkas,
col.names = c("Cabang", "Omzet", "Transaksi", "Rata-rata"),
format.args = list(big.mark = ".")
)
```
Fungsi kable() ngubah data frame jadi tabel yang rapi di dokumen. Buat tabel yang lebih cantik, tambahkan paket kableExtra.
Grafiknya tinggal panggil ggplot2 di chunk terpisah:
```{r grafik-harian, fig.width=8, fig.height=4}
transaksi |>
group_by(tanggal) |>
summarise(omzet = sum(total)) |>
ggplot(aes(tanggal, omzet)) +
geom_col(fill = "#0891b2") +
scale_y_continuous(labels = label_number(scale = 1e-6, suffix = " jt")) +
labs(title = "Omzet Harian", x = NULL, y = "Juta Rp") +
theme_minimal()
```
Kalau kamu belum familier sama sintaks grafiknya, baca dulu panduan ggplot2 dasar.
Langkah 7: terbitkan laporan buat banyak bulan sekaligus
Inilah yang nghemat waktu paling banyak. Bikin satu file R terpisah bernama render.R:
bulan_list <- c("2025-07", "2025-08", "2025-09", "2025-10")
for (b in bulan_list) {
rmarkdown::render(
input = "laporan.Rmd",
params = list(bulan = b),
output_file = paste0("laporan-", b, ".html")
)
}
Jalanin sekali, keluar 4 file laporan lengkap. Waktu prosesnya buat data 61.400 baris sekitar 38 detik di laptop biasa.
Bandingin dengan bikin 4 laporan manual di Word. Itu setengah hari kerja.
Contoh kasus: laporan bulanan toko_berkah
Laporan yang aku pakai buat toko_berkah isinya 5 bagian: ringkasan angka utama, tren harian, perbandingan cabang, 10 produk terlaris, dan catatan kejadian khusus.
Empat bagian pertama otomatis penuh. Bagian kelima diketik manual tiap bulan, isinya konteks yang cuma diketahui manusia, misal "cabang Jatiasih tutup 2 hari karena banjir".
Waktu pengerjaan turun dari 2 jam 40 menit jadi 25 menit. Dua puluh menit di antaranya buat nulis bagian kelima itu.
Yang nggak aku duga: jumlah revisi setelah laporan dikirim turun drastis. Dari rata-rata 3 kali per bulan jadi hampir nol, karena angka di paragraf dan angka di tabel sekarang selalu berasal dari hitungan yang sama.
Kesalahan umum waktu pakai R Markdown
- Ngandelin objek yang ada di Environment. Proses knit jalan di sesi R baru yang kosong. Kalau data cuma ada di memori sesi kamu, knit-nya bakal gagal. Baca datanya di dalam chunk.
- Path file absolut.
C:/Users/bima/Documents/data.csvnggak jalan di komputer orang lain. Pakai path relatif dari folder proyek. - Nulis angka manual di paragraf. Ini balik ke masalah awal. Pakai kode sebaris.
- Chunk kepanjangan. Satu chunk sebaiknya satu tugas. Kalau gagal, kamu langsung tau bagian mana yang salah.
- Lupa echo = FALSE. Atasan kamu nggak butuh lihat 40 baris kode di laporan.
- Nggak ngatur locale buat nama bulan. Kalau mau "Oktober" bukan "October", set
Sys.setlocale("LC_TIME", "id_ID.UTF-8")di chunk setup.
Kapan pilih R Markdown, kapan pilih dashboard
R Markdown cocok buat laporan yang ada narasinya dan terbit berkala, misal laporan bulanan ke manajemen atau laporan penelitian.
Dashboard cocok buat angka yang dicek berulang kali dalam sehari dan butuh filter interaktif.
Banyak tim pakai dua-duanya. Dashboard buat pantau harian, R Markdown buat dokumen resmi yang diarsipkan tiap bulan. Panduan lengkap opsi format dan fitur lainnya ada di dokumentasi resmi R Markdown.
FAQ
Apa bedanya R Markdown dan Quarto?
Quarto adalah penerus R Markdown yang dibuat tim yang sama, dan bisa jalanin Python serta Julia selain R. Sintaks dasarnya hampir identik, jadi keterampilan kamu kebawa. Buat proyek baru yang campur bahasa, Quarto pilihan yang masuk akal. Buat file .Rmd yang udah ada dan jalan, nggak ada keharusan pindah.
Bisa nggak hasil R Markdown diekspor ke Word?
Bisa, ganti bagian output di YAML jadi word_document. Kamu juga bisa pakai file Word sebagai template supaya font dan gaya heading ikut standar kantor, lewat opsi reference_docx. Ini berguna kalau laporan akhirnya harus diedit lagi oleh orang yang nggak pakai R.
Kenapa knit gagal padahal kode jalan di console?
Karena knit jalan di sesi R yang bersih tanpa objek yang ada di Environment kamu. Semua data, paket, dan variabel harus dipanggil di dalam file .Rmd itu sendiri. Cara ngeceknya: restart R, lalu jalanin semua chunk dari atas. Kalau lancar, knit-nya juga bakal lancar.
Gimana cara bikin laporan yang tanggalnya ganti otomatis?
Pakai blok params di header YAML buat nyimpan bulan atau tanggal laporan, lalu panggil dengan params$bulan di kode. Buat menerbitkan banyak periode sekaligus, tulis loop yang manggil rmarkdown::render() dengan nilai params berbeda tiap putaran. Satu perintah bisa ngeluarin laporan 12 bulan sekaligus.
Perlu paham R dulu sebelum belajar R Markdown?
Perlu dasarnya: baca file, ngolah data frame, dan bikin grafik. R Markdown sendiri cuma pembungkus, dia nggak nambah konsep pemrograman baru. Kalau kamu udah bisa bikin ringkasan dan grafik di script R biasa, migrasi ke R Markdown paling makan waktu satu sore.
Ringkasnya
R Markdown nggabungin teks dan kode di satu file, jadi angka di laporan selalu ikut data terbaru.
Pakai blok params buat bulan laporan, lalu terbitkan banyak periode sekaligus dengan satu loop.
Mulai dari laporan paling sederhana: satu angka utama, satu tabel, satu grafik. Kalau kamu masih ngerekap datanya di spreadsheet sebelum masuk R, rapikan dulu pakai SUMIFS dan COUNTIFS, lalu cek juga konsep ETL biar alur datanya jelas.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Pandas groupby: Agregasi Data ala Pivot di Python (2026)
groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.
Pandas read_excel: Baca File Excel di Python
pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.