| Nama | NIM |
|---|---|
| Gayuh Prihatining Ratri | 21108062610040 |
| Khalila Faizakila | 21108062610059 |
| Lana Syawarel | 21108062610062 |
| Muhammad Fakhri Aryasatya | 21108062610070 |
| Niken Wanadyatama | 21108062610085 |
Program Studi: Statistika
Dosen Pengampu: Bayutama Isnaini, S.Si., M.Si.
Modul ini membahas penerapan algoritma dan pemrograman menggunakan bahasa R untuk menentukan prioritas penanganan sampah berdasarkan timbulan sampah di Kabupaten Sukoharjo. Pembaca akan mempelajari cara menyimpan data dalam variabel dan vektor, melakukan operasi aritmatika, menggunakan operator perbandingan dan logika, serta menerapkan percabangan untuk mengelompokkan wilayah berdasarkan tingkat prioritas penanganannya.
Melalui studi kasus ini, pembaca diharapkan mampu menyusun algoritma sederhana dan menerapkannya dalam program R untuk menghasilkan informasi yang dapat membantu proses pengambilan keputusan.
Sampah adalah masalah yang dihadapi hampir semua kota. Menurut UU No. 18 Tahun 2008, pengelolaan sampah terdiri dari dua kegiatan besar, yaitu pengurangan dan penanganan sampah. Masalahnya, anggaran dan armada pengangkut terbatas, sehingga pemerintah daerah tidak bisa menangani semua wilayah sekaligus. Perlu ada urutan: wilayah mana yang harus ditangani lebih dulu?
Salah satu dasar yang bisa dipakai adalah timbulan sampah, yaitu jumlah sampah yang dihasilkan, biasanya dihitung per orang per hari (Semakin besar timbulan di suatu wilayah dan semakin kecil kemampuan layanan pengangkutannya, semakin mendesak wilayah itu ditangani.
Di modul ini kami membuat program R yang menghitung timbulan sampah tiap wilayah, menilai tingkat layanan pengangkutannya, lalu menentukan prioritas penanganan. Kasus ini kami pilih karena keputusannya bertingkat dan cocok untuk dilatih dengan percabangan.
Seluruh data wilayah dan aturan prioritas adalah data sintesis buatan kami untuk keperluan belajar. Angka dan aturan ini bukan data resmi kota mana pun.
1. Membuat variabel dan mengenali tipe datanya,
2. Memakai operator aritmatika, perbandingan, dan logika,
3. Menampilkan output yang sesuai,
4. Menyimpan beberapa data sekaligus dalam vektor,
5. Membuat percabangan dengan `if`, `else if`, `else`, `ifelse()`, dan `switch()`,
6. Menggabungkan semuanya untuk menentukan prioritas penanganan sampah.
R adalah sebuah program komputasi statistika dan grafis (R Core Team 2020). Saat ini R sudah dikenal luas sebagai salah satu powerful software untuk analisis data dan data science. Tentu saja selain R masih banyak software lain yang juga sering digunakan untuk analisis data, misalnya Python. R dibuat dengan tujuan awal untuk komputasi statistika dan grafis. Awalnya digunakan oleh para ilmuwan dalam riset mereka dan para akademisi. Namun seiring perkembangan teknologi, cakupan kemampuan R sebagai bahasa pemrograman menjadi jauh lebih luas. R dapat digunakan untuk membuat dan update report rutin menggunakan R Markdown. R juga dapat membuat aplikasi web interaktif atau dashboard dengan package shiny. Karena R didesain untuk analisis data dan perkembangan serta kemampuannya mencakup hampir semua lini dalam analisis data, tidak heran saat ini banyak analis data dan ilmuwan data (data scientist) menggunakan R untuk menyelesaikan berbagai masalah mereka. Berikut ini beberapa kemampuan R.
Gratis dan Open Source
Merujuk kepada opensource.com, istilah open source merujuk kepada sesuatu yang bisa dimodifikasi dan dibagikan. Open Source Software (OSS) sendiri berarti software yang source code-nya dapat diperiksa, dimodifikasi ditambahkan dan dibagikan oleh siapapun.
Tersedia banyak package
Karena R adalah open source software, hampir semua package yang ada pun dapat digunakan secara bebas. Package adalah kumpulan suatu script yang umumnya berupa function atau data yang dapat digunakan untuk kebutuhan tertentu.
Dibuat oleh statistisi untuk statistisi, data analyst/data scientist
R adalah sebuah program yang awalnya dibuat untuk kebutuhan statistisi. Oleh karena itu banyak fungsi-fungsi dasar untuk statistika maupun eksplorasi data dan grafis sederhana sudah terdapat di R meskipun tanpa install package tambahan. Namun saat ini R sudah menjadi salah satu software yang digunakan dalam data science karena banyaknya package yang dapat mendukung.
Mudah dalam melakukan transformasi dan pemrosesan data
Karena R adalah program untuk analisis data, maka kemampuan R dalam transformasi data seperti penyiapan data, import dan export data dalam berbagai format, dan lain-lain.
Mampu menghasilkan grafik yang sangat bagus
Salah satu keunggulan yang dimiliki oleh R adalah kemampuannya untuk menghasilkan grafik yang sangat bagus. Salah satu yang diunggulkan adalah package {ggplot2}. Tentu saja masih banyak package untuk visualisasi selain {ggplot2}.
Membuat Reproducible report
Ketika Anda mempunyai pekerjaan untuk membuat laporan secara rutin, maka Anda dapat menggunakan R sebagai robot Anda. Dengan package {rmarkdown} Anda dapat membuat laporan rutin dengan hanya satu baris perintah.
Dapat membuat aplikasi interaktif/dashboard berbasis web
Package {shiny} (dan semua pengembangannya) dan {flexdashboard} dapat Anda gunakan untuk membuat visualisasi interaktif ataupun sebagai sebuah produk dari data science.
Membuat REST API
Setelah Anda membuat fungsi atau model prediktif dan ingin digunakan secara lebih luas, Anda dapat membuatnya sebagai API menggunakan package {plumber}.
Sulit untuk dipelajari
Setiap menjalankan perintah harus menggunakan script
Terlalu banyak command
Data dalam R disimpan di memori fisik
Eksekusi coding di R terbilang cukup lama, apalagi data yang kamu miliki adalah data yang berukuran besar
Terlalu kompleks bagi pemula
RStudio adalah Integrated Development Environment (IDE) untuk R yang banyak digunakan hingga saat ini. Dapat dikatakan bahwa hampir semua pengguna R yang sudah mengetahui RStudio akan lebih memilih menggunakan R melalui RStudio dibandingkan dengan menggunakan R GUI.
Sangat disarankan untuk menggunakan RStudio versi terbaru, termasuk juga dengan R. R dan RStudio adalah dua program yang berbeda. Tidak harus install RStudio untuk dapat menggunakan program R (melalui R GUI). Tapi diwajibkan untuk install R terlebih dahulu sebelum install dan menggunakan RStudio karena RStudio membutuhkan program R yang sudah terinstall di PC atau server. Perumpamaan R ini seperti kerangka mobil dan mesinnya, sedangkan RStudio seperti kerangka luar mobil dan interiornya. Anda tidak akan dapat menggunakan mobil tersebut jika Anda hanya mempunyai kerangka luar dan dashboardnya (RStudio) saja.
Variabel merupakan tempat untuk menyimpan data yang dapat digunakan dalam proses pengolahan dan perhitungan. Dalam bahasa R, variabel dapat dibuat menggunakan operator penugasan <- atau =. Variabel digunakan untuk menyimpan berbagai jenis informasi, seperti data numerik, teks, maupun hasil perhitungan.
Tipe data menunjukkan jenis nilai yang disimpan dalam suatu variabel. Beberapa tipe data yang umum digunakan dalam R meliputi numeric untuk bilangan, integer untuk bilangan bulat, character untuk teks, complex untuk bilangan kompleksdan logical untuk nilai TRUE atau FALSE. Pemilihan tipe data yang sesuai diperlukan agar data dapat diolah dengan benar.
Struktur data merupakan cara untuk menyimpan dan mengorganisasikan data dalam program. Beberapa struktur data yang digunakan dalam R adalah:
Vektor, yaitu struktur data yang menyimpan sejumlah elemen dengan tipe data yang sama. Fungsi c() digunakan untuk menggabungkan beberapa elemen menjadi sebuah vektor.
Data frame, yaitu struktur data berbentuk tabel yang terdiri atas baris dan kolom. Data frame dapat menampung beberapa variabel dengan tipe data yang berbeda sehingga sesuai untuk menyajikan data hasil pengolahan.
Factor, yaitu struktur data yang digunakan untuk menyimpan data kategorikal dengan level tertentu. Factor dapat digunakan untuk mengatur kategori dan urutan level dalam penyajian data.
List, struktur data yang sangat fleksibel karena bisa menampung berbagai macam objek dengan tipe data dan bentuk yang berbeda-beda di dalam satu tempat.
Matrix, yaitu struktur data dua dimensi (baris dan kolom) di mana semua elemennya harus memiliki tipe data yang sama, misalnya semuanya harus berupa angka (numeric) atau semuanya harus berupa teks (character).
Operator merupakan simbol yang digunakan untuk melakukan operasi terhadap data. Dalam R, operator aritmatika digunakan untuk perhitungan matematis, seperti penjumlahan (+), pengurangan (-), perkalian (*), dan pembagian (/). Operator perbandingan, seperti >, <, >=, <=, dan ==, digunakan untuk membandingkan nilai. Sementara itu, operator logika, seperti & dan |, digunakan untuk menggabungkan kondisi dalam pengambilan keputusan.
Fungsi dalam R Fungsi merupakan sekumpulan instruksi yang digunakan untuk menjalankan tugas tertentu. R menyediakan berbagai fungsi bawaan, seperti mean() untuk menghitung rata-rata, sum() untuk menjumlahkan nilai, round() untuk membulatkan angka, dan data.frame() untuk membentuk tabel. Fungsi tambahan juga dapat diperoleh melalui package yang sesuai dengan kebutuhan pengolahan data.
Package dalam RPackage merupakan kumpulan fungsi dan data tambahan yang memperluas kemampuan R. Salah satu package yang digunakan dalam pengolahan data adalah dplyr. Package ini menyediakan fungsi case_when() yang dapat digunakan untuk mengelompokkan data berdasarkan beberapa kondisi tertentu. Sebelum menggunakan fungsi dari suatu package, pengguna perlu memastikan package tersebut telah tersedia dan mengaktifkannya menggunakan fungsi library().
Algoritma merupakan urutan langkah yang logis dan sistematis untuk menyelesaikan suatu permasalahan. Dalam pemrograman, algoritma dapat disusun melalui tahapan input, proses, dan output. Input merupakan data yang dimasukkan ke dalam program, proses merupakan tahap pengolahan data, sedangkan output merupakan hasil yang diperoleh setelah proses selesai dilakukan.
Struktur percabangan merupakan struktur kendali yang memungkinkan program memilih tindakan berdasarkan kondisi tertentu. Dalam R, percabangan dapat dilakukan menggunakan if, else if, dan else. Selain itu, fungsi ifelse() dapat digunakan untuk menentukan hasil berdasarkan kondisi logika, sedangkan case_when() dapat digunakan untuk menetapkan hasil berdasarkan beberapa kondisi secara berurutan.
Struktur percabangan berguna dalam proses klasifikasi karena memungkinkan data dikelompokkan berdasarkan kriteria yang telah ditentukan.
Sampah yang dihasilkan oleh setiap wilayah membutuhkan penanganan yang sesuai dengan jumlah timbulan dan kemampuan pelayanan pengangkutannya. Ketika sumber daya penanganan terbatas, diperlukan suatu metode untuk membantu menentukan wilayah yang perlu diprioritaskan.
Dalam studi kasus ini, dibuat sebuah program menggunakan bahasa R untuk mengelompokkan wilayah berdasarkan timbulan sampah dan kapasitas penanganannya. Program akan mengolah data setiap wilayah, membandingkan nilai yang tersedia dengan kriteria yang telah ditentukan, kemudian menghasilkan kategori prioritas penanganan.
Secara umum, penyelesaian kasus dilakukan melalui beberapa tahap, yaitu menentukan data masukan, mengolah data menggunakan operasi aritmatika, menetapkan kondisi berdasarkan operator perbandingan dan logika, serta menentukan kategori menggunakan percabangan.
Hasil program merupakan rekomendasi berdasarkan kriteria yang digunakan dalam modul. Hasil tersebut tidak secara otomatis menggambarkan keputusan resmi pemerintah daerah.
Program terdiri atas beberapa bagian utama, yaitu input data, perhitungan operasi vektor, penentuan kategori timbulan, penentuan prioritas, pengubahan tipe faktor, penyajian data frame, evaluasi status kabupaten, ringkasan statistik, serta penyaringan (subsetting) data.
Input Data Kecamatan
Tahap pertama adalah memasukkan nama 12 kecamatan, jumlah penduduk, dan kapasitas angkut sampah ke dalam variabel berbentuk vektor. Vektor wilayah berisi data bertipe karakter (character), sedangkan penduduk dan kapasitas berisi data numerik (numeric). Setiap elemen pada ketiga vektor merujuk pada kecamatan yang sama berdasarkan urutannya.
Perhitungan Operasi Vektor (Timbulan, Layanan, Sisa, dan Truk Tambahan)
Timbulan Sampah: Dihitung dengan mengalikan jumlah penduduk dengan standar timbulan (0,7 kg/orang/hari) lalu dibagi 1.000 untuk mengonversinya ke satuan ton/hari.
Persentase Layanan: Dihitung membandingkan kapasitas TPS terhadap
timbulan sampah, disempurnakan dengan fungsi pmin() agar
nilainya tidak melebihi 100%.
Perkiraan Sisa Sampah: Dihitung dari selisih timbulan sampah dengan
kapasitas TPS menggunakan fungsi pmax() agar hasilnya tidak
bernilai negatif.
Estimasi Truk Tambahan: Dihitung dengan membagi sisa sampah dengan
kapasitas angkut 1 unit truk (5 ton/hari) lalu dibulatkan menggunakan
fungsi round().
Penentuan Kategori Timbulan
Program menggunakan perulangan for untuk memeriksa timbulan sampah setiap kecamatan. Percabangan if, else if, dan else menentukan kategori berdasarkan nilai timbulan:
Sangat Tinggi: timbulan minimal 100 ton/hari.
Tinggi: timbulan minimal 60 ton/hari dan kurang dari 100 ton/hari.
Sedang: timbulan minimal 30 ton/hari dan kurang dari 60 ton/hari.
Rendah: timbulan kurang dari 30 ton/hari.
Pemeriksaan dilakukan dari batas tertinggi menuju batas terendah agar setiap nilai memperoleh kategori yang sesuai
Penentuan Prioritas Penanganan
Fungsi ifelse() digunakan secara bertingkat untuk menentukan prioritas berdasarkan kategori timbulan dan persentase layanan angkut.
Prioritas 1 (Segera): kategori sangat tinggi dan layanan angkut kurang dari 70%.
Prioritas 2 (Dijadwalkan dekat): kategori sangat tinggi atau tinggi, maupun layanan angkut kurang dari 70%.
Prioritas 3 (Terjadwal): kategori sedang apabila tidak memenuhi kondisi prioritas sebelumnya.
Prioritas 4 (Dipantau): kategori rendah apabila tidak memenuhi kondisi prioritas sebelumnya.
Urutan kondisi penting karena ifelse() memeriksa kondisi secara berurutan. Jika suatu kecamatan sudah memenuhi kondisi pertama, kecamatan tersebut tidak diperiksa lagi pada kondisi berikutnya.
Pengubahan Menjadi Factor Terurut
Hasil pengelompokan kategori dan prioritas dikonversi menjadi tipe
data factor menggunakan fungsi factor() dengan
urutan tingkatan (levels) yang ditentukan secara spesifik agar
penyajian data menjadi terstruktur.
Menampilkan Data Frame Utama
Fungsi data.frame() digunakan untuk menggabungkan
seluruh variabel hasil pengolahan ke dalam satu tabel terstruktur,
lengkap dengan pembulatan angka desimal melalui fungsi
round().
Evaluasi Status Kelayakan Layanan Kabupaten
Program menghitung rata-rata tingkat layanan seluruh kecamatan
(mean(layanan)) lalu mengevaluasinya menggunakan
percabangan if, else if, dan
else:
Status AMAN: Rata-rata layanan >= 80%.
Status WASPADA: Rata-rata layanan >= 60% dan < 80%.
Status BAHAYA: Rata-rata layanan < 60%.
Ringkasan Statistik dan Subsetting Data
Program menghitung total akumulatif (timbulan, sisa sampah, dan
kebutuhan truk) menggunakan fungsi sum(), kemudian
melakukan penyaringan (subsetting) data frame untuk menampilkan
tabel khusus kecamatan yang masuk ke dalam Prioritas 1 dan Prioritas
2.
Mulai.
Muat paket dplyr.
Input data awal yang mencakup nomor, wilayah (kecamatan), jumlah penduduk, dan kapasitas TPS.
Hitung timbulan sampah per ton (\(penduduk × 0.7 / 1000\)), persentase tingkat layanan TPS (maksimal 100%), sisa sampah yang tidak terangkut, serta estimasi kebutuhan truk tambahan (sisa ton dibagi 5).
Tentukan kategori timbulan sampah berdasarkan jumlah ton, jika:
Timbulan >= 100: Sangat Tinggi
Timbulan >= 60: Tinggi
Timbulan >=30: Sedang
Selain itu: Rendah
Tentukan tingkat prioritas penanganan, jika:
Kategori “Sangat Tinggi” dan layanan <70%: Prioritas 1 (Segera)
Kategori “Sangat Tinggi”/“Tinggi” atau layanan <70%: Prioritas 2 (Dijadwalkan dekat)
Kategori “Sedang”: Prioritas 3 (Terjadwal)
Selain itu: Prioritas 4 (Dipantau)
Ubah kolom kategori dan prioritas menjadi bentuk faktor terurut.
Gabungkan seluruh hasil perhitungan ke dalam sebuah data frame utama lalu tampilkan.
Hitung rata-rata tingkat layanan kabupaten dan tentukan status kelayakan layanan:
Rata-rata layanan >=80%: Status AMAN
Rata-rata layanan >=60%: Status WASPADA
Selain itu: Status BAHAYA
Hitung dan tampilkan ringkasan statistik kabupaten (total timbulan sampah, total sampah tak terangkut, dan total kebutuhan truk tambahan).
Lakukan subsetting data untuk menyaring dan menampilkan kecamatan yang masuk ke dalam Prioritas 1 dan 2.
Selesai.
Perintah library(dplyr) yang diletakkan di awal programyang berfungsi untuk memanggil atau mengaktifkan paket (package) dplyr ke dalam sesi R yang sedang berjalan, sehingga fungsi-fungsi manipulasi data yang ada di dalamnya (seperti pemfilteran, pengelompokan, atau transformasi data) dapat digunakan dengan lancar pada baris-baris kode selanjutnya.
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Mendefinisikan dan memasukkan data dasar awal ke dalam beberapa variabel vektor, yang meliputi nomor urut wilayah (no dari 1 sampai 12), nama 12 kecamatan di Kabupaten Sukoharjo (wilayah), jumlah penduduk (penduduk), serta kapasitas pengelolaan TPS (kapasitas).
# Membuat vektor untuk data wilayah, penduduk, dan kapasitas TPS
no = 1:12
wilayah = c("Kec. Baki", "Kec. Bendosari", "Kec. Bulu",
"Kec. Gatak", "Kec. Grogol", "Kec. Kartasura",
"Kec. Mojolaban", "Kec. Nguter", "Kec. Polokarto",
"Kec. Sukoharjo", "Kec. Tawangsari", "Kec. Weru")
penduduk = c(70841, 65260, 39520, 53182, 143656, 109724, 91775, 37285, 77611,
98044, 57815, 69495)
kapasitas = c(48, 45, 25, 35, 65, 60, 54, 25, 50, 49, 35, 45)Melakukan perhitungan matematika secara vektor untuk menganalisis sampah, mulai dari menetapkan standar timbulan per orang (0.7 kg/hari), menghitung total timbulan sampah dalam satuan ton (timbulan_ton), menghitung persentase tingkat layanan (layanan dengan batas maksimal 100 menggunakan fungsi pmin), menghitung sisa sampah yang belum terangkut (sisa_ton dengan nilai minimum 0 menggunakan fungsi pmax).
Menghitung estimasi jumlah kebutuhan truk pengangkut sampah tambahan (truk_tambahan) dengan cara membagi jumlah sisa sampah yang belum terangkut (sisa_ton) dengan kapasitas angkut 1 unit truk yaitu 5 ton per hari, lalu dibulatkan menggunakan fungsi round().
Menggunakan fungsi case_when() dari paket dplyr untuk mengelompokkan atau mengkategorikan setiap wilayah berdasarkan besar timbulan_ton secara bersyarat: wilayah dengan timbulan 100 ton dikategorikan “Sangat Tinggi”, 60 ton dikategorikan “Tinggi”, 30 ton dikategorikan “sedang”, dan selebihnya (TRUE) dikategorikan “Rendah”.
Menentukan tingkat prioritas penanganan wilayah menggunakan fungsi ifelse() karena untuk menentukan kategori prioritas ke dalam kolom baru berdasarkan kondisi kolom kategori dan layanan, di mana data yang memenuhi kategori “Sangat Tinggi” dengan layanan di bawah 70 diklasifikasikan sebagai Prioritas 1, diikuti oleh kondisi kategori tinggi/sangat tinggi atau layanan di bawah 70 sebagai Prioritas 2, kategori “sedang” sebagai Prioritas 3, dan sisanya otomatis masuk ke Prioritas 4.
Mengonversi variabel teks pada kolom kategori dan prioritas menjadi data bertipe factor dengan urutan jenjang (levels) yang ditentukan secara spesifik (dari “Rendah” ke “Sangat Tinggi” dan dari “Prioritas 1” ke “Prioritas 4”) agar pembacaan dan pengurutan data saat analisis atau visualisasi menjadi terstruktur.
# Mengubah Menjadi Faktor Terurut
kategori_fkt = factor(kategori, levels = c("Rendah", "Sedang", "Tinggi", "Sangat Tinggi"))
prioritas_fkt = factor(prioritas, levels = c("Prioritas 1 (Segera)",
"Prioritas 2 (Dijadwalkan dekat)",
"Prioritas 3 (Terjadwal)",
"Prioritas 4 (Dipantau)"))
Menyusun seluruh variabel hasil pengolahan data ke dalam satu tabel terstruktur bernama hasil menggunakan fungsi data.frame(), di mana beberapa variabel angka seperti timbulan_ton, Layanan_persen, dan sisa_ton dibulatkan menjadi satu desimal menggunakan fungsi round()
Perintah cat() dan pemanggilan hasil: Berfungsi untuk mencetak teks judul keterangan
=== TABEL HASIL ANALISIS PENANGANAN SAMPAH ===
ke konsol, diikuti dengan menampilkan keseluruhan isi dari objek data.frame hasil agar dapat dibaca oleh pengguna.
## === TABEL HASIL ANALISIS PENANGANAN SAMPAH ===
## No Wilayah Jumlah_Penduduk Kapasitas_TPS Timbulan_ton Kategori
## 1 1 Kec. Baki 70841 48 49.6 Sedang
## 2 2 Kec. Bendosari 65260 45 45.7 Sedang
## 3 3 Kec. Bulu 39520 25 27.7 Rendah
## 4 4 Kec. Gatak 53182 35 37.2 Sedang
## 5 5 Kec. Grogol 143656 65 100.6 Sangat Tinggi
## 6 6 Kec. Kartasura 109724 60 76.8 Tinggi
## 7 7 Kec. Mojolaban 91775 54 64.2 Tinggi
## 8 8 Kec. Nguter 37285 25 26.1 Rendah
## 9 9 Kec. Polokarto 77611 50 54.3 Sedang
## 10 10 Kec. Sukoharjo 98044 49 68.6 Tinggi
## 11 11 Kec. Tawangsari 57815 35 40.5 Sedang
## 12 12 Kec. Weru 69495 45 48.6 Sedang
## Layanan_persen Sisa_ton Prioritas Truk_Tambahan
## 1 96.8 1.6 Prioritas 3 (Terjadwal) 0
## 2 98.5 0.7 Prioritas 3 (Terjadwal) 0
## 3 90.4 2.7 Prioritas 4 (Dipantau) 1
## 4 94.0 2.2 Prioritas 3 (Terjadwal) 0
## 5 64.6 35.6 Prioritas 1 (Segera) 7
## 6 78.1 16.8 Prioritas 2 (Dijadwalkan dekat) 3
## 7 84.1 10.2 Prioritas 2 (Dijadwalkan dekat) 2
## 8 95.8 1.1 Prioritas 4 (Dipantau) 0
## 9 92.0 4.3 Prioritas 3 (Terjadwal) 1
## 10 71.4 19.6 Prioritas 2 (Dijadwalkan dekat) 4
## 11 86.5 5.5 Prioritas 3 (Terjadwal) 1
## 12 92.5 3.6 Prioritas 3 (Terjadwal) 1
Menghitung rata-rata tingkat layanan (rata_layanan = mean(layanan)) lalu menggunakan struktur percabangan if() untuk mengevaluasi status kelayakan layanan kabupaten. Jika rata-rata 80 maka statusnya AMAN, jika 60 statusnya WASPADA, dan jika di bawah itu maka statusnya BAHAYA, yang kemudian dicetak ke konsol beserta nilai persentasenya.
## === STATUS KELAYAKAN LAYANAN KABUPATEN ===
if (rata_layanan >= 80) {
cat("Status: AMAN (Rata-rata tingkat layanan kabupaten memadai: ", round(rata_layanan, 1), "%)\n")
} else if (rata_layanan >= 60) {
cat("Status: WASPADA (Rata-rata tingkat layanan kabupaten cukup: ", round(rata_layanan, 1), "%)\n")
} else {
cat("Status: BAHAYA (Rata-rata tingkat layanan kabupaten kurang: ", round(rata_layanan, 1), "%)\n")
}## Status: AMAN (Rata-rata tingkat layanan kabupaten memadai: 87.1 %)
Menghitung dan menampilkan total keseluruhan dari beberapa parameter penting secara kumulatif. Perintah ini menampilkan total timbulan sampah, total sampah yang tidak terangkut (sisa ton), serta total kebutuhan truk tambahan yang dibulatkan menggunakan perintah round().
##
## === RINGKASAN STATISTIK KABUPATEN SUKOHARJO ===
## Total Timbulan Sampah : 639.9 ton/hari
## Total Sampah Tak Terangkut: 103.9 ton/hari
## Total Kebutuhan Truk Tambahan: 20 unit
Melakukan penyaringan (subsetting) pada data frame utama hasil untuk mengambil baris-baris data yang memiliki kolom Prioritas bernilai “Prioritas 1 (Segera)” atau “Prioritas 2 (Dijadwalkan dekat)”, lalu menyimpannya ke dalam objek baru bernama prioritas_utama. Setelah itu, kode mencetak judul tabel khusus dan menampilkan isi dari subset data tersebut ke konsol.
prioritas_utama = hasil[hasil$Prioritas %in% c("Prioritas 1 (Segera)",
"Prioritas 2 (Dijadwalkan dekat)"),]
prioritas_utama## No Wilayah Jumlah_Penduduk Kapasitas_TPS Timbulan_ton Kategori
## 5 5 Kec. Grogol 143656 65 100.6 Sangat Tinggi
## 6 6 Kec. Kartasura 109724 60 76.8 Tinggi
## 7 7 Kec. Mojolaban 91775 54 64.2 Tinggi
## 10 10 Kec. Sukoharjo 98044 49 68.6 Tinggi
## Layanan_persen Sisa_ton Prioritas Truk_Tambahan
## 5 64.6 35.6 Prioritas 1 (Segera) 7
## 6 78.1 16.8 Prioritas 2 (Dijadwalkan dekat) 3
## 7 84.1 10.2 Prioritas 2 (Dijadwalkan dekat) 2
## 10 71.4 19.6 Prioritas 2 (Dijadwalkan dekat) 4
| No | Wilayah | Jumlah Penduduk | Kapasitas TPS | Timbulan (ton) | Kategori | Layanan (%) | Sisa (ton) | Prioritas | Truk Tambahan |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Kec. Baki | 70841 | 48 | 49.6 | Sedang | 96.8 | 1.6 | Prioritas 3 | 0 |
| 2 | Kec. Bendosari | 65260 | 45 | 45.7 | Sedang | 98.5 | 0.7 | Prioritas 3 | 0 |
| 3 | Kec. Bulu | 39520 | 25 | 27.7 | Rendah | 90.4 | 2.7 | Prioritas 4 | 1 |
| 4 | Kec. Gatak | 53182 | 35 | 37.2 | Sedang | 94.0 | 2.2 | Prioritas 3 | 0 |
| 5 | Kec. Grogol | 143656 | 65 | 100.6 | Sangat Tinggi | 64.6 | 35.6 | Prioritas 1 | 7 |
| 6 | Kec. Kartasura | 109724 | 60 | 76.8 | Tinggi | 78.1 | 16.8 | Prioritas 2 | 3 |
| 7 | Kec. Mojolaban | 91775 | 54 | 64.2 | Tinggi | 84.1 | 10.2 | Prioritas 2 | 2 |
| 8 | Kec. Nguter | 37285 | 25 | 26.1 | Rendah | 95.8 | 1.1 | Prioritas 4 | 0 |
| 9 | Kec. Polokarto | 77611 | 50 | 54.3 | Sedang | 92.0 | 4.3 | Prioritas 3 | 1 |
| 10 | Kec. Sukoharjo | 98044 | 49 | 68.6 | Tinggi | 71.4 | 19.6 | Prioritas 2 | 4 |
| 11 | Kec. Tawangsari | 57815 | 35 | 40.5 | Sedang | 86.5 | 5.5 | Prioritas 3 | 1 |
| 12 | Kec. Weru | 69495 | 45 | 48.6 | Sedang | 92.5 | 3.6 | Prioritas 3 | 1 |
| No | Wilayah | Jumlah Penduduk | Kapasitas TPS | Timbulan (ton) | Kategori | Layanan (%) | Sisa (ton) | Prioritas | Truk Tambahan |
|---|---|---|---|---|---|---|---|---|---|
| 5 | Kec. Grogol | 143656 | 65 | 100.6 | Sangat Tinggi | 64.6 | 35.6 | Prioritas 1 | 7 |
| 6 | Kec. Kartasura | 109724 | 60 | 76.8 | Tinggi | 78.1 | 16.8 | Prioritas 2 | 3 |
| 7 | Kec. Mojolaban | 91775 | 54 | 64.2 | Tinggi | 84.1 | 10.2 | Prioritas 2 | 2 |
| 10 | Kec. Sukoharjo | 98044 | 49 | 68.6 | Tinggi | 71.4 | 19.6 | Prioritas 2 | 4 |
| Parameter | Hasil |
|---|---|
| Status Kelayakan Layanan Kabupaten | AMAN (Rata-rata tingkat layanan kabupaten memadai: 87.1 %) |
| Total Timbulan Sampah | 639.9 ton/hari |
| Total Sampah Tak Terangkut | 103.9 ton/hari |
| Total Kebutuhan Truk Tambahan | 20 unit |
Program Penentuan Prioritas Penanganan Sampah Kabupaten Sukoharjo
Berbasis R merupakan contoh penerapan algoritma untuk mengolah data
wilayah dan mengelompokkan tingkat prioritas penanganan sampah
berdasarkan timbulan serta kapasitas layanannya. Melalui program ini,
mahasiswa dapat mempraktikkan konsep input, proses, dan output,
pengelolaan variabel dan vektor, penggunaan operator aritmatika,
perbandingan, serta logika, hingga penerapan percabangan seperti
if, else if, else,
case_when(), dan ifelse() untuk menghasilkan
penyajian data frame yang terstruktur. Meskipun demikian, sistem ini
memiliki batasan karena data dan kriteria yang digunakan masih berupa
simulasi buatan untuk keperluan pembelajaran. Oleh sebab itu, hasil
rekomendasi program tidak dapat dijadikan sebagai keputusan resmi
pemerintah daerah tanpa adanya validasi dan pengkajian langsung di
lapangan.
KODE PROGRAM LENGKAP
# ============================================================
# PROGRAM PENENTUAN PRIORITAS PENANGANAN SAMPAH KAB. SUKOHARJO
# ============================================================
library(dplyr)
#INPUT DATA
no = 1:12
wilayah = c("Kec. Baki", "Kec. Bendosari", "Kec. Bulu",
"Kec. Gatak", "Kec. Grogol", "Kec. Kartasura",
"Kec. Mojolaban", "Kec. Nguter", "Kec. Polokarto",
"Kec. Sukoharjo", "Kec. Tawangsari", "Kec. Weru")
penduduk = c(70841, 65260, 39520, 53182, 143656, 109724, 91775, 37285, 77611,
98044, 57815, 69495)
kapasitas = c(48, 45, 25, 35, 65, 60, 54, 25, 50, 49, 35, 45)
#PERHITUNGAN OPERASI VEKTOR
timbulan_per_orang = 0.7
timbulan_ton = penduduk * timbulan_per_orang / 1000
layanan = pmin(kapasitas / timbulan_ton * 100, 100)
sisa_ton = pmax(timbulan_ton - kapasitas, 0)
# Estimasi Kebutuhan Truk Tambahan (1 Truk = 5 Ton/hari)
truk_tambahan = round(sisa_ton / 5, 0)
#PENENTUAN KATEGORI
kategori = case_when(
timbulan_ton >= 100 ~ "Sangat Tinggi",
timbulan_ton >= 60 ~ "Tinggi",
timbulan_ton >= 30 ~ "Sedang",
TRUE ~ "Rendah"
)
#PENENTUAN PRIORITAS
prioritas = ifelse(kategori == "Sangat Tinggi" & layanan < 70,
"Prioritas 1 (Segera)",
ifelse(kategori %in% c("Sangat Tinggi", "Tinggi") | layanan < 70,
"Prioritas 2 (Dijadwalkan dekat)",
ifelse(kategori == "Sedang",
"Prioritas 3 (Terjadwal)",
"Prioritas 4 (Dipantau)")))
#MENGUBAH MENJADI FAKTOR TERURUT
kategori_fkt = factor(kategori, levels = c("Rendah",
"Sedang",
"Tinggi",
"Sangat Tinggi"))
prioritas_fkt = factor(prioritas, levels = c("Prioritas 1 (Segera)",
"Prioritas 2 (Dijadwalkan dekat)",
"Prioritas 3 (Terjadwal)",
"Prioritas 4 (Dipantau)"))
#MENAMPILKAN DATA FRAME UTAMA
hasil = data.frame(
No = no,
Wilayah = wilayah,
Jumlah_Penduduk = penduduk,
Kapasitas_TPS = kapasitas,
Timbulan_ton = round(timbulan_ton, 1),
Kategori = kategori_fkt,
Layanan_persen = round(layanan, 1),
Sisa_ton = round(sisa_ton, 1),
Prioritas = prioritas_fkt,
Truk_Tambahan = truk_tambahan
)
cat("=== TABEL HASIL ANALISIS PENANGANAN SAMPAH ===\n")
hasil
#PENAMBAHAN PENGECEKAN KONDISI
rata_layanan = mean(layanan)
cat("\n=== STATUS KELAYAKAN LAYANAN KABUPATEN ===\n")
if (rata_layanan >= 80) {
cat("Status: AMAN (Rata-rata tingkat layanan kabupaten memadai: ",
round(rata_layanan, 1), "%)\n")
} else if (rata_layanan >= 60) {
cat("Status: WASPADA (Rata-rata tingkat layanan kabupaten cukup: ",
round(rata_layanan, 1), "%)\n")
} else {
cat("Status: BAHAYA (Rata-rata tingkat layanan kabupaten kurang: ",
round(rata_layanan, 1), "%)\n")
}
#RINGKASAN STATISTIK
cat("\n=== RINGKASAN STATISTIK KABUPATEN SUKOHARJO ===\n")
cat("Total Timbulan Sampah :", round(sum(timbulan_ton), 1), "ton/hari\n")
cat("Total Sampah Tak Terangkut:", round(sum(sisa_ton), 1), "ton/hari\n")
cat("Total Kebutuhan Truk Tambahan:", round(sum(truk_tambahan), 0), "unit\n\n")
#SUBSETTING DATA FRAME
prioritas_utama = hasil[hasil$Prioritas %in% c("Prioritas 1 (Segera)",
"Prioritas 2 (Dijadwalkan dekat)"),]
cat("=== TABEL KECAMATAN PRIORITAS PENANGANAN SEGERA (PRIORITAS 1 & 2) ===\n")
prioritas_utama