1 MODUL PRAKTIKUM ALGORITMA DAN PEMROGRAMAN

Dosen Pengampu: Bayutama Isnaini, S.Si., M.Si.

Disusun oleh: Kelompok A

Nama NIM
Aisyah Umi Azzahra 21108062610004
Aulin Praba Kinanti 21108062610015
Bona Aron Sidauruk 21108062610018
Fairuz Zahwa Fathurochman 21108062610031
Fatihan Bilal Akhsana 21108062610036

2 MODUL PRAKTIKUM

2.1 Deskripsi Praktikum

Praktikum ini membahas penerapan algoritma dan pemrograman menggunakan bahasa R untuk mengolah data nilai mahasiswa. Program digunakan untuk menghitung persentase kehadiran, menghitung nilai akhir, menentukan grade, memeriksa status kehadiran, dan menentukan kelulusan mahasiswa.

Data yang digunakan terdiri dari 20 mahasiswa dengan empat komponen penilaian, yaitu tugas, Case Method (CM), Ujian Tengah Semester (UTS), dan Ujian Akhir Semester (UAS).

2.2 Tujuan Praktikum

Setelah menyelesaikan praktikum ini, mahasiswa diharapkan mampu:

  1. Memahami konsep dasar pemrograman R.
  2. Menggunakan variabel, vektor, matriks, array, factor, dan data frame.
  3. Menghitung persentase kehadiran mahasiswa.
  4. Menghitung nilai akhir berdasarkan bobot penilaian.
  5. Menentukan grade menggunakan case_when().
  6. Menentukan status kehadiran menggunakan if_else().
  7. Menentukan kelulusan menggunakan ifelse().
  8. Menampilkan hasil pengolahan data dalam tabel.
  9. Mengekspor hasil pengolahan ke dalam file Excel.

2.3 Alat dan Bahan

  • Aplikasi R dan RStudio.
  • Paket dplyr untuk pengolahan data dan percabangan.
  • Paket knitr untuk menampilkan tabel pada HTML.
  • Paket openxlsx untuk mengekspor data ke Excel dan mengatur lembar kerja.
  • Data nilai 20 mahasiswa.

2.4 Gambaran Alur Praktikum

Proses pengolahan data dilakukan melalui tahapan berikut:

  1. Memasukkan identitas mahasiswa.
  2. Memasukkan data kehadiran dan nilai.
  3. Menghitung persentase kehadiran.
  4. Menghitung nilai akhir.
  5. Menentukan grade.
  6. Menentukan status kehadiran.
  7. Menentukan kelulusan.
  8. Menggabungkan hasil dalam data frame.
  9. Menampilkan hasil dan mengekspor data ke Excel.

3 KONSEP DASAR

3.1 Variabel dan Vektor

Variabel digunakan untuk menyimpan nilai, sedangkan vektor merupakan kumpulan nilai yang disimpan dalam satu objek.

Operator <- digunakan untuk memberikan nilai kepada variabel. Fungsi c() digunakan untuk menggabungkan beberapa nilai menjadi vektor.

contoh_nilai <- c(80, 85, 90, 95)

contoh_nilai
## [1] 80 85 90 95

Pada contoh tersebut, variabel contoh_nilai menyimpan empat nilai mahasiswa.

3.2 Matriks dan Array

Matriks merupakan struktur data berbentuk baris dan kolom. Array dapat memiliki lebih dari dua dimensi.

contoh_matrix <- matrix(
  c(80, 85, 90, 95),
  nrow = 2,
  ncol = 2
)

contoh_matrix
##      [,1] [,2]
## [1,]   80   90
## [2,]   85   95

Fungsi matrix() membentuk matriks dengan dua baris dan dua kolom.

3.3 Data Frame

Data frame merupakan struktur data berbentuk tabel yang dapat menyimpan beberapa variabel dalam kolom berbeda.

contoh_data <- data.frame(
  Nama = c("Andi", "Budi", "Citra"),
  Nilai = c(80, 85, 90)
)

kable(contoh_data, caption = "Contoh Data Frame")
Contoh Data Frame
Nama Nilai
Andi 80
Budi 85
Citra 90

3.4 Percabangan

Percabangan digunakan untuk menentukan hasil berdasarkan kondisi tertentu.

  • case_when() digunakan untuk menentukan grade berdasarkan rentang nilai.
  • if_else() digunakan untuk menentukan status kehadiran.
  • ifelse() digunakan untuk menentukan kelulusan berdasarkan kondisi.

3.5 Factor

Factor digunakan untuk merepresentasikan data kategori dengan tingkat tertentu. Contohnya adalah grade A, B, C, dan D.

3.6 Rumus Perhitungan

Persentase kehadiran:

\[ \text{Absensi}=\frac{\text{Jumlah Hadir}}{\text{Total Pertemuan}}\times100 \]

Nilai akhir:

\[ \text{Nilai Akhir}=0{,}25T+0{,}25CM+0{,}25UTS+0{,}25UAS \]

Keterangan:

  • \(T\) = nilai tugas.
  • \(CM\) = nilai Case Method.
  • \(UTS\) = nilai Ujian Tengah Semester.
  • \(UAS\) = nilai Ujian Akhir Semester.

Kriteria grade:

Nilai akhir Grade
>= 85 A
>= 75 dan < 85 B
>= 60 dan < 75 C
< 60 D

Mahasiswa memenuhi ketentuan kehadiran apabila persentase kehadirannya minimal 75%. Mahasiswa dinyatakan lulus apabila memperoleh grade A, B, atau C serta memenuhi ketentuan kehadiran.

4 PENYELESAIAN KASUS

4.1 Deskripsi Kasus

Kasus yang diselesaikan adalah pengolahan nilai 20 mahasiswa dalam satu kelas. Program harus menghasilkan nilai akhir berdasarkan empat komponen penilaian, menentukan grade, mengevaluasi kehadiran, dan menetapkan kelulusan setiap mahasiswa.

4.2 Memasukkan Data Mahasiswa

Data identitas mahasiswa terdiri dari nomor, nama, dan jenis kelamin.

no <- 1:20

nama_mhs <- c(
  "Abi", "Adi", "Budi", "Bondan", "Basuki",
  "Bobi", "Coki", "Cakra", "Dodi", "Dean",
  "Echa", "Elvie", "Fika", "Fera", "Gia",
  "Gigi", "Hanin", "Ira", "Kiara", "Karin"
)

JK <- c(rep("L", 10), rep("P", 10))

data_mahasiswa <- data.frame(
  no, nama_mhs, JK
)

kable(
  data_mahasiswa,
  caption = "Data Identitas Mahasiswa"
)
Data Identitas Mahasiswa
no nama_mhs JK
1 Abi L
2 Adi L
3 Budi L
4 Bondan L
5 Basuki L
6 Bobi L
7 Coki L
8 Cakra L
9 Dodi L
10 Dean L
11 Echa P
12 Elvie P
13 Fika P
14 Fera P
15 Gia P
16 Gigi P
17 Hanin P
18 Ira P
19 Kiara P
20 Karin P

Fungsi rep() digunakan untuk mengulang kategori jenis kelamin. Fungsi data.frame() menggabungkan identitas mahasiswa menjadi sebuah tabel.

4.3 Memasukkan Data Kehadiran

Jumlah pertemuan selama satu semester ditetapkan sebanyak 16 kali.

total_pertemuan <- 16

Kehadiran <- c(
  15, 14, 15, 16, 12, 16, 11, 16, 15, 13,
  10, 11, 12, 14, 15, 11, 16, 16, 14, 15
)

absensi <- Kehadiran / total_pertemuan * 100

data_kehadiran <- data.frame(
  nama_mhs, Kehadiran, absensi
)

kable(
  data_kehadiran,
  digits = 2,
  caption = "Data Kehadiran Mahasiswa"
)
Data Kehadiran Mahasiswa
nama_mhs Kehadiran absensi
Abi 15 93.75
Adi 14 87.50
Budi 15 93.75
Bondan 16 100.00
Basuki 12 75.00
Bobi 16 100.00
Coki 11 68.75
Cakra 16 100.00
Dodi 15 93.75
Dean 13 81.25
Echa 10 62.50
Elvie 11 68.75
Fika 12 75.00
Fera 14 87.50
Gia 15 93.75
Gigi 11 68.75
Hanin 16 100.00
Ira 16 100.00
Kiara 14 87.50
Karin 15 93.75

Persentase kehadiran dihitung dengan membagi jumlah hadir dengan 16, kemudian mengalikannya dengan 100.

4.4 Memasukkan Data Nilai

nilai_tgs <- c(
  90, 85, 82, 95, 80, 92, 88, 84, 90, 78,
  85, 82, 65, 58, 60, 65, 50, 60, 45, 55
)

nilai_CM <- c(
  85, 90, 80, 85, 90, 88, 85, 80, 90, 90,
  85, 88, 90, 80, 85, 80, 88, 80, 88, 88
)

nilai_uts <- c(
  85, 80, 78, 90, 75, 88, 82, 79, 86, 72,
  80, 77, 60, 55, 65, 58, 50, 62, 45, 55
)

nilai_uas <- c(
  88, 82, 80, 92, 78, 90, 85, 80, 88, 75,
  82, 80, 58, 60, 55, 62, 48, 55, 50, 58
)

data_nilai <- data.frame(
  nama_mhs, nilai_tgs, nilai_CM, nilai_uts, nilai_uas
)

kable(
  data_nilai,
  caption = "Data Nilai Komponen Mahasiswa"
)
Data Nilai Komponen Mahasiswa
nama_mhs nilai_tgs nilai_CM nilai_uts nilai_uas
Abi 90 85 85 88
Adi 85 90 80 82
Budi 82 80 78 80
Bondan 95 85 90 92
Basuki 80 90 75 78
Bobi 92 88 88 90
Coki 88 85 82 85
Cakra 84 80 79 80
Dodi 90 90 86 88
Dean 78 90 72 75
Echa 85 85 80 82
Elvie 82 88 77 80
Fika 65 90 60 58
Fera 58 80 55 60
Gia 60 85 65 55
Gigi 65 80 58 62
Hanin 50 88 50 48
Ira 60 80 62 55
Kiara 45 88 45 50
Karin 55 88 55 58

Setiap vektor berisi 20 nilai dengan urutan yang sama seperti vektor nama mahasiswa.

4.5 Membuat Matriks dan Array

nilai_matrix <- matrix(
  c(nilai_tgs, nilai_CM, nilai_uts, nilai_uas),
  nrow = 20,
  ncol = 4
)

colnames(nilai_matrix) <- c(
  "Tugas", "CM", "UTS", "UAS"
)

rownames(nilai_matrix) <- nama_mhs

kable(
  nilai_matrix,
  caption = "Matriks Nilai Mahasiswa"
)
Matriks Nilai Mahasiswa
Tugas CM UTS UAS
Abi 90 85 85 88
Adi 85 90 80 82
Budi 82 80 78 80
Bondan 95 85 90 92
Basuki 80 90 75 78
Bobi 92 88 88 90
Coki 88 85 82 85
Cakra 84 80 79 80
Dodi 90 90 86 88
Dean 78 90 72 75
Echa 85 85 80 82
Elvie 82 88 77 80
Fika 65 90 60 58
Fera 58 80 55 60
Gia 60 85 65 55
Gigi 65 80 58 62
Hanin 50 88 50 48
Ira 60 80 62 55
Kiara 45 88 45 50
Karin 55 88 55 58
nilai_array <- array(
  c(nilai_matrix),
  dim = c(20, 4, 1),
  dimnames = list(
    nama_mhs,
    c("nilai_tgs", "nilai_CM", "nilai_uts", "nilai_uas"),
    "nilai"
  )
)

nilai_array["Abi", , "nilai"]
## nilai_tgs  nilai_CM nilai_uts nilai_uas 
##        90        85        85        88

Matriks menyimpan data dalam 20 baris dan empat kolom. Array menyimpan data yang sama dalam struktur tiga dimensi berukuran 20 × 4 × 1.

4.6 Menghitung Nilai Akhir

nilai_akhir <- 0.25 * nilai_tgs +
               0.25 * nilai_CM +
               0.25 * nilai_uts +
               0.25 * nilai_uas

kable(
  data.frame(nama_mhs, nilai_akhir),
  digits = 2,
  caption = "Nilai Akhir Mahasiswa"
)
Nilai Akhir Mahasiswa
nama_mhs nilai_akhir
Abi 87.00
Adi 84.25
Budi 80.00
Bondan 90.50
Basuki 80.75
Bobi 89.50
Coki 85.00
Cakra 80.75
Dodi 88.50
Dean 78.75
Echa 83.00
Elvie 81.75
Fika 68.25
Fera 63.25
Gia 66.25
Gigi 66.25
Hanin 59.00
Ira 64.25
Kiara 57.00
Karin 64.00

Setiap komponen dikalikan dengan bobot 25%. Seluruh hasil kemudian dijumlahkan untuk memperoleh nilai akhir.

4.7 Menentukan Grade

grade <- case_when(
  nilai_akhir >= 85 ~ "A",
  nilai_akhir >= 75 ~ "B",
  nilai_akhir >= 60 ~ "C",
  TRUE ~ "D"
)

Grade <- factor(
  grade,
  levels = c("A", "B", "C", "D")
)

kable(
  data.frame(nama_mhs, nilai_akhir, Grade),
  digits = 2,
  caption = "Hasil Penentuan Grade"
)
Hasil Penentuan Grade
nama_mhs nilai_akhir Grade
Abi 87.00 A
Adi 84.25 B
Budi 80.00 B
Bondan 90.50 A
Basuki 80.75 B
Bobi 89.50 A
Coki 85.00 A
Cakra 80.75 B
Dodi 88.50 A
Dean 78.75 B
Echa 83.00 B
Elvie 81.75 B
Fika 68.25 C
Fera 63.25 C
Gia 66.25 C
Gigi 66.25 C
Hanin 59.00 D
Ira 64.25 C
Kiara 57.00 D
Karin 64.00 C

Fungsi case_when() memeriksa kondisi secara berurutan. Nilai yang tidak memenuhi ketiga kondisi pertama akan memperoleh grade D.

4.8 Menentukan Status Kehadiran

kategori_absensi <- if_else(
  absensi >= 75,
  "Memenuhi",
  "Tidak Memenuhi"
)

Status <- factor(
  kategori_absensi,
  levels = c("Memenuhi", "Tidak Memenuhi")
)

kable(
  data.frame(nama_mhs, absensi, Status),
  digits = 2,
  caption = "Status Kehadiran Mahasiswa"
)
Status Kehadiran Mahasiswa
nama_mhs absensi Status
Abi 93.75 Memenuhi
Adi 87.50 Memenuhi
Budi 93.75 Memenuhi
Bondan 100.00 Memenuhi
Basuki 75.00 Memenuhi
Bobi 100.00 Memenuhi
Coki 68.75 Tidak Memenuhi
Cakra 100.00 Memenuhi
Dodi 93.75 Memenuhi
Dean 81.25 Memenuhi
Echa 62.50 Tidak Memenuhi
Elvie 68.75 Tidak Memenuhi
Fika 75.00 Memenuhi
Fera 87.50 Memenuhi
Gia 93.75 Memenuhi
Gigi 68.75 Tidak Memenuhi
Hanin 100.00 Memenuhi
Ira 100.00 Memenuhi
Kiara 87.50 Memenuhi
Karin 93.75 Memenuhi

Fungsi if_else() menentukan status kehadiran berdasarkan batas minimum 75%.

4.9 Menentukan Kelulusan

kelulusan <- ifelse(
  (grade %in% c("A", "B", "C")) &
    Status == "Memenuhi",
  "Lulus",
  "Tidak Lulus"
)

kable(
  data.frame(nama_mhs, Grade, Status, kelulusan),
  caption = "Hasil Kelulusan Mahasiswa"
)
Hasil Kelulusan Mahasiswa
nama_mhs Grade Status kelulusan
Abi A Memenuhi Lulus
Adi B Memenuhi Lulus
Budi B Memenuhi Lulus
Bondan A Memenuhi Lulus
Basuki B Memenuhi Lulus
Bobi A Memenuhi Lulus
Coki A Tidak Memenuhi Tidak Lulus
Cakra B Memenuhi Lulus
Dodi A Memenuhi Lulus
Dean B Memenuhi Lulus
Echa B Tidak Memenuhi Tidak Lulus
Elvie B Tidak Memenuhi Tidak Lulus
Fika C Memenuhi Lulus
Fera C Memenuhi Lulus
Gia C Memenuhi Lulus
Gigi C Tidak Memenuhi Tidak Lulus
Hanin D Memenuhi Tidak Lulus
Ira C Memenuhi Lulus
Kiara D Memenuhi Tidak Lulus
Karin C Memenuhi Lulus

Operator %in% memeriksa apakah grade termasuk A, B, atau C. Operator & memastikan bahwa grade dan status kehadiran harus sama-sama memenuhi syarat kelulusan.

4.10 Menggabungkan Hasil

hasil <- data.frame(
  no,
  nama_mhs,
  JK,
  Kehadiran,
  absensi,
  kategori_absensi,
  nilai_tgs,
  nilai_CM,
  nilai_uts,
  nilai_uas,
  nilai_akhir,
  grade,
  kelulusan
)

kable(
  hasil,
  digits = 2,
  caption = "Tabel Lengkap Hasil Pengolahan Nilai",
  align = "c"
)
Tabel Lengkap Hasil Pengolahan Nilai
no nama_mhs JK Kehadiran absensi kategori_absensi nilai_tgs nilai_CM nilai_uts nilai_uas nilai_akhir grade kelulusan
1 Abi L 15 93.75 Memenuhi 90 85 85 88 87.00 A Lulus
2 Adi L 14 87.50 Memenuhi 85 90 80 82 84.25 B Lulus
3 Budi L 15 93.75 Memenuhi 82 80 78 80 80.00 B Lulus
4 Bondan L 16 100.00 Memenuhi 95 85 90 92 90.50 A Lulus
5 Basuki L 12 75.00 Memenuhi 80 90 75 78 80.75 B Lulus
6 Bobi L 16 100.00 Memenuhi 92 88 88 90 89.50 A Lulus
7 Coki L 11 68.75 Tidak Memenuhi 88 85 82 85 85.00 A Tidak Lulus
8 Cakra L 16 100.00 Memenuhi 84 80 79 80 80.75 B Lulus
9 Dodi L 15 93.75 Memenuhi 90 90 86 88 88.50 A Lulus
10 Dean L 13 81.25 Memenuhi 78 90 72 75 78.75 B Lulus
11 Echa P 10 62.50 Tidak Memenuhi 85 85 80 82 83.00 B Tidak Lulus
12 Elvie P 11 68.75 Tidak Memenuhi 82 88 77 80 81.75 B Tidak Lulus
13 Fika P 12 75.00 Memenuhi 65 90 60 58 68.25 C Lulus
14 Fera P 14 87.50 Memenuhi 58 80 55 60 63.25 C Lulus
15 Gia P 15 93.75 Memenuhi 60 85 65 55 66.25 C Lulus
16 Gigi P 11 68.75 Tidak Memenuhi 65 80 58 62 66.25 C Tidak Lulus
17 Hanin P 16 100.00 Memenuhi 50 88 50 48 59.00 D Tidak Lulus
18 Ira P 16 100.00 Memenuhi 60 80 62 55 64.25 C Lulus
19 Kiara P 14 87.50 Memenuhi 45 88 45 50 57.00 D Tidak Lulus
20 Karin P 15 93.75 Memenuhi 55 88 55 58 64.00 C Lulus

Data frame hasil menggabungkan seluruh informasi mahasiswa ke dalam 13 kolom, mulai dari identitas hingga kelulusan.

5 HASIL DAN PEMBAHASAN

5.1 Hasil Pengolahan Data

Program menghasilkan tabel berisi identitas, jumlah kehadiran, persentase absensi, nilai tugas, nilai CM, nilai UTS, nilai UAS, nilai akhir, grade, dan kelulusan setiap mahasiswa.

Nilai akhir dihitung menggunakan bobot yang sama, yaitu 25% untuk setiap komponen. Grade ditentukan berdasarkan rentang nilai akhir, sedangkan kelulusan ditentukan berdasarkan grade dan status kehadiran.

5.2 Ringkasan Nilai

ringkasan_nilai <- data.frame(
  Keterangan = c(
    "Jumlah mahasiswa",
    "Rata-rata nilai akhir",
    "Nilai akhir tertinggi",
    "Nilai akhir terendah"
  ),
  Nilai = c(
    nrow(hasil),
    mean(hasil$nilai_akhir),
    max(hasil$nilai_akhir),
    min(hasil$nilai_akhir)
  )
)

kable(
  ringkasan_nilai,
  digits = 2,
  caption = "Ringkasan Nilai Akhir"
)
Ringkasan Nilai Akhir
Keterangan Nilai
Jumlah mahasiswa 20.0
Rata-rata nilai akhir 75.9
Nilai akhir tertinggi 90.5
Nilai akhir terendah 57.0

Tabel ini menunjukkan jumlah mahasiswa serta gambaran umum distribusi nilai akhir berdasarkan rata-rata, nilai tertinggi, dan nilai terendah.

5.3 Distribusi Grade

distribusi_grade <- as.data.frame(
  table(Grade)
)

names(distribusi_grade) <- c("Grade", "Jumlah")

kable(
  distribusi_grade,
  caption = "Jumlah Mahasiswa Berdasarkan Grade"
)
Jumlah Mahasiswa Berdasarkan Grade
Grade Jumlah
A 5
B 7
C 6
D 2

Distribusi grade menunjukkan jumlah mahasiswa yang memperoleh grade A, B, C, dan D.

5.4 Ringkasan Kelulusan

jumlah_lulus <- sum(hasil$kelulusan == "Lulus")
jumlah_tidak_lulus <- sum(hasil$kelulusan == "Tidak Lulus")

ringkasan_kelulusan <- data.frame(
  Keterangan = c(
    "Jumlah mahasiswa",
    "Jumlah lulus",
    "Jumlah tidak lulus"
  ),
  Jumlah = c(
    nrow(hasil),
    jumlah_lulus,
    jumlah_tidak_lulus
  )
)

kable(
  ringkasan_kelulusan,
  caption = "Ringkasan Kelulusan Mahasiswa"
)
Ringkasan Kelulusan Mahasiswa
Keterangan Jumlah
Jumlah mahasiswa 20
Jumlah lulus 14
Jumlah tidak lulus 6

Jumlah lulus dan tidak lulus dihitung secara otomatis berdasarkan kondisi yang telah ditetapkan dalam program.

5.5 Pembahasan

Penggunaan bahasa R membantu mengotomatisasi proses pengolahan nilai mahasiswa. Perhitungan nilai akhir dilakukan melalui operasi aritmetika, sedangkan penentuan grade, status kehadiran, dan kelulusan menggunakan percabangan.

Struktur data seperti vektor, matriks, array, factor, dan data frame memperlihatkan beberapa cara penyimpanan dan pengelolaan data dalam R. Tabel hasil akhir juga mempermudah pemeriksaan nilai setiap mahasiswa.

6 EKSPOR HASIL KE EXCEL

Hasil pengolahan nilai mahasiswa disimpan ke dalam file Excel dengan tiga sheet, yaitu Dashboard, Hasil Analisis, dan Data Awal. File akan tersimpan di folder kerja RStudio tempat proses ekspor dijalankan.

Sebelum menjalankan kode, pastikan paket openxlsx sudah terpasang. Jika belum, jalankan install.packages("openxlsx") melalui Console RStudio.

library(openxlsx)

wb <- createWorkbook()

addWorksheet(wb, "Dashboard")
addWorksheet(wb, "Hasil Analisis")
addWorksheet(wb, "Data Awal")

# Dashboard
writeData(
  wb, "Dashboard",
  "HASIL PENGOLAHAN NILAI MAHASISWA",
  startRow = 1, startCol = 1
)

writeData(wb, "Dashboard", "Total Mahasiswa", 3, 1)
writeData(wb, "Dashboard", nrow(hasil), 3, 2)

writeData(wb, "Dashboard", "Rata-rata Nilai Akhir", 4, 1)
writeData(wb, "Dashboard", round(mean(hasil$nilai_akhir), 2), 4, 2)

writeData(wb, "Dashboard", "Nilai Tertinggi", 5, 1)
writeData(wb, "Dashboard", max(hasil$nilai_akhir), 5, 2)

writeData(wb, "Dashboard", "Nilai Terendah", 6, 1)
writeData(wb, "Dashboard", min(hasil$nilai_akhir), 6, 2)

writeData(wb, "Dashboard", "Jumlah Lulus", 7, 1)
writeData(wb, "Dashboard", sum(hasil$kelulusan == "Lulus"), 7, 2)

writeData(wb, "Dashboard", "Jumlah Tidak Lulus", 8, 1)
writeData(wb, "Dashboard", sum(hasil$kelulusan == "Tidak Lulus"), 8, 2)

# Tabel distribusi grade pada Dashboard
tabel_ranking <- as.data.frame(table(hasil$grade))
names(tabel_ranking) <- c("Grade", "Jumlah Mahasiswa")

writeDataTable(
  wb, "Dashboard", tabel_ranking,
  startRow = 11, startCol = 1,
  tableStyle = "TableStyleMedium2"
)

# Hasil analisis
writeDataTable(
  wb, "Hasil Analisis", hasil,
  startRow = 1, startCol = 1,
  tableStyle = "TableStyleMedium2"
)

# Data awal
data_awal <- hasil[, c(
  "no",
  "nama_mhs",
  "JK",
  "Kehadiran",
  "nilai_tgs",
  "nilai_CM",
  "nilai_uts",
  "nilai_uas"
)]

writeDataTable(
  wb, "Data Awal", data_awal,
  startRow = 1, startCol = 1,
  tableStyle = "TableStyleMedium2"
)

# Lebar kolom
setColWidths(wb, "Dashboard", 1:5, "auto")
setColWidths(wb, "Hasil Analisis", 1:ncol(hasil), "auto")
setColWidths(wb, "Data Awal", 1:ncol(data_awal), "auto")

# Simpan file Excel
saveWorkbook(
  wb,
  "Hasil_Nilai_Mahasiswa.xlsx",
  overwrite = TRUE
)

print("File berhasil dibuat")
## [1] "File berhasil dibuat"

Jika proses berhasil, Console akan menampilkan:

[1] "File berhasil dibuat"

File Excel yang dihasilkan bernama Hasil_Nilai_Mahasiswa.xlsx.

7 KESIMPULAN

Praktikum ini menerapkan bahasa pemrograman R untuk mengolah data nilai 20 mahasiswa. Program menggunakan variabel, vektor, matriks, array, factor, dan data frame untuk menyimpan serta mengelola data.

Nilai akhir dihitung berdasarkan empat komponen penilaian dengan bobot masing-masing 25%. Program kemudian menentukan grade menggunakan case_when(), status kehadiran menggunakan if_else(), dan kelulusan menggunakan ifelse().

Hasil pengolahan ditampilkan dalam bentuk tabel, dilengkapi dengan ringkasan nilai, distribusi grade, dan ringkasan kelulusan. Data hasil akhir juga dapat diekspor ke Excel sehingga memudahkan penyimpanan, pemeriksaan, dan pelaporan hasil praktikum.