dplyr untuk yang Sudah Bisa pandas: Tabel Padanan Fungsi
TL;DR
dplyr dan pandas ngerjain hal yang sama dengan nama beda: filter jadi pengganti boolean indexing, select jadi pengganti pemilihan kolom, mutate jadi pengganti assign, dan group_by plus summarise jadi pengganti groupby plus agg. Perbedaan terbesarnya ada di gaya nulis. dplyr nyambungin langkah pakai pipe jadi satu alur yang kebaca dari atas ke bawah, sementara pandas nyusun lewat rantai method. Kalau kamu udah paham logika pandas, pindah ke dplyr biasanya cuma butuh satu sore.
dplyr adalah paket R buat olah tabel, dan hampir semua fungsinya punya padanan langsung di pandas.
Kamu udah bisa groupby dan merge. Waktu buka kode R orang lain, yang bikin bingung bukan logikanya, tapi nama fungsinya.
Di bawah ini tabel padanannya, dari yang paling sering kepake sampai yang agak jarang, plus contoh di data penjualan toko_berkah.
Apa itu dplyr?
dplyr adalah paket R buat manipulasi data tabel dengan kata kerja yang namanya gamblang: filter, select, mutate, arrange, dan summarise. Dia bagian dari kumpulan paket tidyverse. Fungsinya sama kayak pandas di Python, cuma gaya nulisnya nyambungin langkah pakai pipe, jadi kode kebaca berurutan dari atas ke bawah.
Pipe di R modern ditulis |>. Tanda ini ngoper hasil langkah sebelumnya jadi argumen pertama fungsi berikutnya.
Kalau kamu terbiasa nulis df.groupby().agg() berantai, konsepnya udah kamu pegang.
Tabel padanan fungsi dplyr dan pandas
Ini padanan yang paling sering kepake di kerjaan harian analis.
| Tugas | dplyr (R) | pandas (Python) |
|---|---|---|
| Saring baris | filter(total > 100000) | df[df["total"] > 100000] |
| Pilih kolom | select(kota, total) | df[["kota", "total"]] |
| Bikin kolom baru | mutate(margin = harga - modal) | df.assign(margin=df["harga"] - df["modal"]) |
| Urutkan | arrange(desc(total)) | df.sort_values("total", ascending=False) |
| Ganti nama kolom | rename(omzet = total) | df.rename(columns={"total": "omzet"}) |
| Ambil nilai unik | distinct(kota) | df[["kota"]].drop_duplicates() |
| Hitung per kelompok | count(kota, sort = TRUE) | df["kota"].value_counts() |
| Ambil baris teratas | slice_head(n = 10) | df.head(10) |
| Gabung tabel | left_join(produk, by = "produk_id") | df.merge(produk, on="produk_id", how="left") |
| Ambil satu kolom jadi vektor | pull(total) | df["total"] |
| Hitung nilai unik | n_distinct(kota) | df["kota"].nunique() |
| Logika bertingkat | case_when(...) | np.select(...) |
Daftar resmi semua fungsinya ada di dokumentasi resmi dplyr.
Gimana cara nulis group by di dplyr?
Ini bagian yang paling beda rasanya. Di pandas, kamu ngelompokin dan meringkas dalam satu langkah agg. Di dplyr, kamu pisah jadi dua kata kerja.
Versi pandas:
ringkas = (
df.groupby("kota")
.agg(omzet=("total", "sum"),
jumlah_transaksi=("total", "size"))
.reset_index()
.sort_values("omzet", ascending=False)
)
Versi dplyr:
ringkas <- df |>
group_by(kota) |>
summarise(
omzet = sum(total),
jumlah_transaksi = n(),
.groups = "drop"
) |>
arrange(desc(omzet))
Hasil keduanya sama. Yang beda cuma urutan bacanya.
Perhatiin .groups = "drop". Tanpa itu, hasilnya masih bawa status berkelompok, dan langkah berikutnya bisa jalan di tiap kelompok tanpa kamu sadar. Ini sumber bug yang paling sering nyusahin pendatang dari pandas.
Fungsi sum dan n di sini termasuk aggregate function, konsep yang sama persis kayak di SQL.
Contoh kasus: penjualan toko_berkah per kota
Data yang aku pakai: transaksi toko_berkah selama Januari sampai Juni, 84.216 baris, tersebar di 6 kota di Jawa Tengah.
Pertanyaannya sederhana. Kota mana yang omzetnya besar tapi rata-rata belanjanya kecil?
hasil <- transaksi |>
filter(status == "selesai") |>
group_by(kota) |>
summarise(
omzet = sum(total),
transaksi = n(),
rata_belanja = mean(total),
.groups = "drop"
) |>
mutate(rata_belanja = round(rata_belanja)) |>
arrange(desc(omzet))
Hasilnya:
| Kota | Omzet | Transaksi | Rata-rata belanja |
|---|---|---|---|
| Semarang | Rp 3,84 miliar | 28.410 | Rp 135.000 |
| Solo | Rp 2,61 miliar | 14.902 | Rp 175.000 |
| Kudus | Rp 1,92 miliar | 17.336 | Rp 111.000 |
| Salatiga | Rp 1,04 miliar | 9.118 | Rp 114.000 |
| Pekalongan | Rp 0,88 miliar | 7.905 | Rp 111.000 |
| Magelang | Rp 0,74 miliar | 6.545 | Rp 113.000 |
Yang menarik: Kudus punya transaksi 16% lebih banyak dari Solo, tapi omzetnya 26% lebih kecil. Selisih rata-rata belanja Rp 64.000 per struk yang jadi penyebabnya.
Kalau Kudus bisa naikin rata-rata belanja jadi Rp 130.000 aja, tambahannya sekitar Rp 329 juta di periode yang sama. Angka itu ketemu dalam 6 baris dplyr.
Logika ringkasan kayak gini di spreadsheet biasanya dikerjain pakai SUMIFS, dan mulai berat waktu barisnya lewat ratusan ribu.
Beda kebiasaan yang bikin pengguna pandas kepeleset
Nama kolom nggak pakai tanda kutip. Di dplyr kamu nulis filter(kota == "Solo"), bukan filter("kota" == "Solo"). Nama kolom dianggap variabel di dalam data.
Indeks mulai dari 1. R ngitung dari 1, Python dari 0. Ini bikin salah waktu ambil baris atau kolom pakai posisi.
Nggak ada indeks baris kayak pandas. Data frame di R nggak punya index yang nyimpen makna. Kalau kamu terbiasa set_index, di dplyr kamu simpan aja sebagai kolom biasa.
summarise ngurangin jumlah baris, mutate nggak. Kalau kamu mau nambah kolom total per kelompok tanpa ngurangin baris, pakai group_by lalu mutate, bukan summarise.
NA bukan NaN. Nilai kosong di R ditulis NA, dan banyak fungsi hitung bakal balikin NA kalau ada satu nilai kosong. Tambahin na.rm = TRUE di sum atau mean.
Kapan pilih dplyr, kapan pilih pandas?
Pilih pandas kalau hasil analisismu bakal nyambung ke pipeline produksi, model machine learning, atau aplikasi web. Ekosistem Python lebih luas di situ.
Pilih dplyr kalau kerjaanmu banyak di statistik, riset, atau laporan. Bikin model statistik dan grafik di R biasanya lebih singkat kodenya.
Buat perbandingan tool yang lebih luas sebelum mutusin, cek Excel vs Python untuk analis. Kalau kamu mau lihat contoh analisis statistik yang R sering dipakai, ada di regresi linear.
FAQ
Apakah dplyr lebih cepat dari pandas?
Tergantung ukuran data dan operasinya, dan bedanya biasanya nggak besar buat data di bawah satu juta baris. Kalau kamu butuh kecepatan di data besar, ada paket dtplyr yang jalan pakai mesin data.table tapi sintaksnya tetap dplyr. Di sisi Python, ada Polars yang gaya nulisnya justru mirip dplyr. Pilihannya lebih baik didasarkan pada kenyamanan tim daripada selisih detik.
Pipe di R pakai %>% atau |>?
Dua-duanya jalan. %>% datang dari paket magrittr dan udah dipakai bertahun-tahun di kode tidyverse. |> adalah pipe bawaan R yang ada sejak versi 4.1 dan nggak butuh paket tambahan. Buat kode baru, pakai |> aja biar lebih sedikit ketergantungan. Kalau kamu baca kode lama, kamu bakal sering ketemu %>%, dan artinya sama.
Gimana cara bikin kolom kondisional kayak np.select di dplyr?
Pakai case_when di dalam mutate. Contohnya mutate(segmen = case_when(total >= 200000 ~ "besar", total >= 100000 ~ "sedang", .default = "kecil")). Urutan kondisinya penting, soalnya yang pertama cocok yang dipakai. Buat kondisi tunggal yang cuma punya dua hasil, if_else lebih ringkas dan lebih gampang dibaca orang lain.
Apakah aku perlu belajar R kalau udah bisa Python?
Nggak wajib, tapi berguna kalau kamu kerja di tim yang laporannya udah jalan di R, atau kamu masuk ke bidang riset dan statistik. Banyak lowongan analis di riset pasar dan kesehatan nyebut R sebagai syarat. Kalau kamu udah paham pandas, mempelajari dplyr sampai bisa kerja nyata biasanya cuma butuh beberapa jam, bukan berminggu-minggu.
Kenapa hasil summarise-ku masih terkelompok?
Karena summarise cuma ngelepas satu tingkat pengelompokan. Kalau kamu group_by(kota, bulan) lalu summarise, hasilnya masih terkelompok per kota, dan operasi berikutnya jalan di tiap kota. Tambahin .groups = "drop" di dalam summarise buat ngelepas semuanya. Kebiasaan ini nyelametin kamu dari angka yang keliatan bener tapi salah kelompok.
Penutup
Pindah dari pandas ke dplyr sebagian besar cuma soal kosakata. Lima kata kerja utama nutupin mayoritas kerjaan harian.
Yang perlu perhatian ekstra cuma dua: sisa pengelompokan setelah summarise, dan penanganan NA.
Coba ambil satu script pandas yang paling sering kamu jalanin, lalu tulis ulang jadi dplyr sambil buka tabel padanan di atas. Habis itu lanjut ke regresi linear buat lihat kekuatan R di sisi statistik.
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.