Program Studi/Kelas: Statistika/A
Dosen Pengampu: Bayutama Isnaini, S.Si., M.Si.
Anggota Kelompok F
| No | Nama | NIM |
|---|---|---|
| 1 | Adinda Erlin Mafazi Rahma | 21108062610002 |
| 2 | Angelina Yonna Agni Prasetyo | 21108062610011 |
| 3 | Athifa Nuria Maghfiro | 21108062610014 |
| 4 | Faridatun Khasanah | 21108062610034 |
| 5 | Fathinatuz Zahra | 21108062610035 |
Setelah membaca modul ini, pembaca diharapkan mampu:
ifelse(), baik satu tingkat maupun bertingkat.Setiap bulan, divisi HR/SDM sebuah perusahaan harus menyiapkan slip gaji seluruh karyawan. Gaji bersih tiap karyawan berbeda-beda karena bergantung pada divisi, masa kerja, rating kinerja, dan jam lembur. Menghitungnya secara manual untuk banyak karyawan memakan waktu dan rentan salah, sehingga perhitungannya dibuat otomatis dengan program R berdasarkan aturan perusahaan.
Data yang dicatat untuk setiap karyawan:
Dari data tersebut, program menghitung gaji pokok, tunjangan, bonus kinerja, upah lembur, potongan pajak, dan gaji bersih.
Catatan: Data pada modul ini adalah data sintesis (buatan). Aturan pajak disederhanakan dan bukan perhitungan PPh 21 resmi.
| Kriteria | Aturan | Hasil |
|---|---|---|
| Gaji pokok (berdasarkan divisi) | IT | Rp9.000.000 |
| Keuangan | Rp7.000.000 | |
| Pemasaran | Rp6.500.000 | |
| HRD | Rp6.000.000 | |
| Tunjangan masa kerja | kurang dari 2 tahun | Rp0 |
| 2 sampai 5 tahun | Rp500.000 | |
| lebih dari 5 tahun | Rp1.000.000 | |
| Bonus kinerja (dari gaji pokok) | rating 5 | 20% |
| rating 4 | 10% | |
| rating 3 | 5% | |
| rating kurang dari 3 | 0% | |
| Upah lembur | jam lembur lebih dari 10 jam | jam lembur x 1,5 x tarif normal per jam |
| selain itu | Rp0 (tidak layak lembur) | |
| Potongan Pajak | penghasilan kotor lebih dari Rp10.000.000 | 10% dari penghasilan kotor |
| selain itu | 5% dari penghasilan kotor |
Variabel menyimpan data. Operator perbandingan (<,
<=, >, >=,
==, !=) menghasilkan nilai TRUE
atau FALSE.
rating <- 4
rating == 5
## [1] FALSE
rating >= 3
## [1] TRUE
Bentuk umum dari fungsi percabangan adalah
ifelse(kondisi, nilai_jika_benar, nilai_jika_salah). Fungsi
ini bekerja pada seluruh isi vektor sekaligus, sehingga efektif
digunakan untuk data banyak baris.
jam_lembur <- c(5, 12, 20)
ifelse(jam_lembur > 10, "Layak lembur", "Tidak layak lembur")
## [1] "Tidak layak lembur" "Layak lembur" "Layak lembur"
Jika ada lebih dari dua kemungkinan, ifelse() diletakkan
di dalam ifelse(). Jika kondisi pertama salah, R memeriksa
kondisi kedua, dan seterusnya.
rating <- c(5, 3, 1)
ifelse(rating == 5, 0.20,
ifelse(rating == 3, 0.05, 0)
)
## [1] 0.20 0.05 0.00
Pertama, perhitungan dilakukan untuk satu karyawan.
nama <- "Budi Santoso"
divisi <- "IT"
masa_kerja <- 4 # tahun
rating <- 4 # skala 1-5
jam_lembur <- 12 # jam
class(nama)
## [1] "character"
class(masa_kerja)
## [1] "numeric"
Catatan: R sering menampilkan angka bulat yang besar dalam bentuk ilmiah. Contoh:
9e+06artinya 9 x 10^6 = 9.000.000. Untuk menghilangkan bentuk ilmiah, digunakan fungsioptions(scipen = 999)
options(scipen = 999)
gaji_pokok <- ifelse(divisi == "IT", 9000000,
ifelse(divisi == "Keuangan", 7000000,
ifelse(divisi == "Pemasaran", 6500000, 6000000)))
gaji_pokok
## [1] 9000000
tunjangan <- ifelse(masa_kerja < 2, 0,
ifelse(masa_kerja <= 5, 500000, 1000000))
tunjangan
## [1] 500000
persen_bonus <- ifelse(rating == 5, 0.20,
ifelse(rating == 4, 0.10,
ifelse(rating == 3, 0.05, 0)))
bonus <- persen_bonus * gaji_pokok
bonus
## [1] 900000
tarif_normal <- gaji_pokok / 173
status_lembur <- ifelse(jam_lembur > 10, "Layak lembur", "Tidak layak lembur")
upah_lembur <- ifelse(jam_lembur > 10, jam_lembur * 1.5 * tarif_normal, 0)
status_lembur
## [1] "Layak lembur"
upah_lembur
## [1] 936416.2
penghasilan_kotor <- gaji_pokok + tunjangan + bonus + upah_lembur
tarif_pajak <- ifelse(penghasilan_kotor > 10000000, 0.10, 0.05)
pajak <- tarif_pajak * penghasilan_kotor
gaji_bersih <- penghasilan_kotor - pajak
nama
## [1] "Budi Santoso"
divisi
## [1] "IT"
tarif_pajak
## [1] 0.1
slip <- data.frame(
Komponen = c("Gaji pokok", "Tunjangan", "Bonus kinerja", "Upah lembur",
"Penghasilan kotor", "Pajak", "Gaji bersih"),
Jumlah = c(gaji_pokok, tunjangan, bonus, upah_lembur,
penghasilan_kotor, pajak, gaji_bersih)
)
slip
| Komponen | Jumlah |
|---|---|
| Gaji pokok | 9000000.0 |
| Tunjangan | 500000.0 |
| Bonus kinerja | 900000.0 |
| Upah lembur | 936416.2 |
| Penghasilan kotor | 11336416.2 |
| Pajak | 1133641.6 |
| Gaji bersih | 10202774.6 |
Untuk menghitung gaji banyak karyawan sekaligus, digunakan fungsi
ifelse().
Data frame berikut berisi data sintesis 8 karyawan.
karyawan <- data.frame(
nama = c("Budi", "Sari", "Andi", "Dewi", "Rudi", "Maya", "Fajar", "Lina"),
divisi = c("IT", "Keuangan", "Pemasaran", "HRD", "IT", "Keuangan", "Pemasaran", "HRD"),
masa_kerja = c(4, 1, 7, 3, 0.5, 6, 2, 8),
rating = c(4, 5, 3, 2, 3, 5, 4, 1),
jam_lembur = c(12, 0, 15, 8, 20, 11, 5, 0)
)
karyawan
| nama | divisi | masa_kerja | rating | jam_lembur |
|---|---|---|---|---|
| Budi | IT | 4.0 | 4 | 12 |
| Sari | Keuangan | 1.0 | 5 | 0 |
| Andi | Pemasaran | 7.0 | 3 | 15 |
| Dewi | HRD | 3.0 | 2 | 8 |
| Rudi | IT | 0.5 | 3 | 20 |
| Maya | Keuangan | 6.0 | 5 | 11 |
| Fajar | Pemasaran | 2.0 | 4 | 5 |
| Lina | HRD | 8.0 | 1 | 0 |
karyawan$gaji_pokok <- ifelse(karyawan$divisi == "IT", 9000000,
ifelse(karyawan$divisi == "Keuangan", 7000000,
ifelse(karyawan$divisi == "Pemasaran", 6500000, 6000000)))
karyawan$tunjangan <- ifelse(karyawan$masa_kerja < 2, 0,
ifelse(karyawan$masa_kerja <= 5, 500000, 1000000))
tabel_pokok <- data.frame(
nama = karyawan$nama,
divisi = karyawan$divisi,
masa_kerja = karyawan$masa_kerja,
gaji_pokok = karyawan$gaji_pokok,
tunjangan = karyawan$tunjangan
)
tabel_pokok
| nama | divisi | masa_kerja | gaji_pokok | tunjangan |
|---|---|---|---|---|
| Budi | IT | 4.0 | 9000000 | 500000 |
| Sari | Keuangan | 1.0 | 7000000 | 0 |
| Andi | Pemasaran | 7.0 | 6500000 | 1000000 |
| Dewi | HRD | 3.0 | 6000000 | 500000 |
| Rudi | IT | 0.5 | 9000000 | 0 |
| Maya | Keuangan | 6.0 | 7000000 | 1000000 |
| Fajar | Pemasaran | 2.0 | 6500000 | 500000 |
| Lina | HRD | 8.0 | 6000000 | 1000000 |
karyawan$persen_bonus <- ifelse(karyawan$rating == 5, 0.20,
ifelse(karyawan$rating == 4, 0.10,
ifelse(karyawan$rating == 3, 0.05, 0)))
karyawan$bonus <- karyawan$persen_bonus * karyawan$gaji_pokok
tabel_bonus <- data.frame(
nama = karyawan$nama,
rating = karyawan$rating,
persen_bonus = karyawan$persen_bonus,
bonus = karyawan$bonus
)
tabel_bonus
| nama | rating | persen_bonus | bonus |
|---|---|---|---|
| Budi | 4 | 0.10 | 900000 |
| Sari | 5 | 0.20 | 1400000 |
| Andi | 3 | 0.05 | 325000 |
| Dewi | 2 | 0.00 | 0 |
| Rudi | 3 | 0.05 | 450000 |
| Maya | 5 | 0.20 | 1400000 |
| Fajar | 4 | 0.10 | 650000 |
| Lina | 1 | 0.00 | 0 |
karyawan$status_lembur <- ifelse(karyawan$jam_lembur > 10, "Layak lembur", "Tidak layak lembur")
karyawan$upah_lembur <- ifelse(karyawan$jam_lembur > 10,
karyawan$jam_lembur * 1.5 * karyawan$gaji_pokok / 173, 0)
tabel_lembur <- data.frame(
nama = karyawan$nama,
jam_lembur = karyawan$jam_lembur,
status_lembur = karyawan$status_lembur,
upah_lembur = karyawan$upah_lembur
)
tabel_lembur
| nama | jam_lembur | status_lembur | upah_lembur |
|---|---|---|---|
| Budi | 12 | Layak lembur | 936416.2 |
| Sari | 0 | Tidak layak lembur | 0.0 |
| Andi | 15 | Layak lembur | 845375.7 |
| Dewi | 8 | Tidak layak lembur | 0.0 |
| Rudi | 20 | Layak lembur | 1560693.6 |
| Maya | 11 | Layak lembur | 667630.1 |
| Fajar | 5 | Tidak layak lembur | 0.0 |
| Lina | 0 | Tidak layak lembur | 0.0 |
karyawan$penghasilan_kotor <- karyawan$gaji_pokok + karyawan$tunjangan +
karyawan$bonus + karyawan$upah_lembur
karyawan$tarif_pajak <- ifelse(karyawan$penghasilan_kotor > 10000000, 0.10, 0.05)
karyawan$pajak <- karyawan$tarif_pajak * karyawan$penghasilan_kotor
karyawan$gaji_bersih <- karyawan$penghasilan_kotor - karyawan$pajak
tabel_pajak <- data.frame(
nama = karyawan$nama,
penghasilan_kotor = karyawan$penghasilan_kotor,
tarif_pajak = karyawan$tarif_pajak,
pajak = karyawan$pajak,
gaji_bersih = karyawan$gaji_bersih
)
tabel_pajak
| nama | penghasilan_kotor | tarif_pajak | pajak | gaji_bersih |
|---|---|---|---|---|
| Budi | 11336416 | 0.10 | 1133641.6 | 10202775 |
| Sari | 8400000 | 0.05 | 420000.0 | 7980000 |
| Andi | 8670376 | 0.05 | 433518.8 | 8236857 |
| Dewi | 6500000 | 0.05 | 325000.0 | 6175000 |
| Rudi | 11010694 | 0.10 | 1101069.4 | 9909624 |
| Maya | 10067630 | 0.10 | 1006763.0 | 9060867 |
| Fajar | 7650000 | 0.05 | 382500.0 | 7267500 |
| Lina | 7000000 | 0.05 | 350000.0 | 6650000 |
Tabel hasil akhir terdiri atas gabungan seluruh komponen gaji setiap karyawan.
hasil <- data.frame(
nama = karyawan$nama,
divisi = karyawan$divisi,
gaji_pokok = karyawan$gaji_pokok,
tunjangan = karyawan$tunjangan,
bonus = karyawan$bonus,
upah_lembur = karyawan$upah_lembur,
penghasilan_kotor = karyawan$penghasilan_kotor,
pajak = karyawan$pajak,
gaji_bersih = karyawan$gaji_bersih
)
hasil
| nama | divisi | gaji_pokok | tunjangan | bonus | upah_lembur | penghasilan_kotor | pajak | gaji_bersih |
|---|---|---|---|---|---|---|---|---|
| Budi | IT | 9000000 | 500000 | 900000 | 936416.2 | 11336416 | 1133641.6 | 10202775 |
| Sari | Keuangan | 7000000 | 0 | 1400000 | 0.0 | 8400000 | 420000.0 | 7980000 |
| Andi | Pemasaran | 6500000 | 1000000 | 325000 | 845375.7 | 8670376 | 433518.8 | 8236857 |
| Dewi | HRD | 6000000 | 500000 | 0 | 0.0 | 6500000 | 325000.0 | 6175000 |
| Rudi | IT | 9000000 | 0 | 450000 | 1560693.6 | 11010694 | 1101069.4 | 9909624 |
| Maya | Keuangan | 7000000 | 1000000 | 1400000 | 667630.1 | 10067630 | 1006763.0 | 9060867 |
| Fajar | Pemasaran | 6500000 | 500000 | 650000 | 0.0 | 7650000 | 382500.0 | 7267500 |
| Lina | HRD | 6000000 | 1000000 | 0 | 0.0 | 7000000 | 350000.0 | 6650000 |
Ringkasan gaji bersih seluruh karyawan:
ringkasan <- data.frame(
Keterangan = c("Jumlah karyawan", "Total gaji bersih", "Rata-rata gaji bersih",
"Gaji bersih tertinggi", "Gaji bersih terendah"),
Nilai = c(nrow(karyawan), sum(karyawan$gaji_bersih), mean(karyawan$gaji_bersih),
max(karyawan$gaji_bersih), min(karyawan$gaji_bersih))
)
ringkasan
| Keterangan | Nilai |
|---|---|
| Jumlah karyawan | 8 |
| Total gaji bersih | 65482623 |
| Rata-rata gaji bersih | 8185328 |
| Gaji bersih tertinggi | 10202775 |
| Gaji bersih terendah | 6175000 |
Pembahasan berdasarkan data hasil analisis:
Dengan variabel, operator perbandingan, dan percabangan
ifelse() dalam program R, perhitungan gaji (gaji pokok,
tunjangan, bonus, upah lembur, pajak, dan gaji bersih) dapat diolah
secara otomatis berdasarkan data karyawan dan aturan perusahaan. Sistem
yang sama dapat digunakan untuk kasus lain yang membutuhkan klasifikasi
tertentu, seperti penentuan diskon belanja atau penggolongan nilai.