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 |
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).
Setelah menyelesaikan praktikum ini, mahasiswa diharapkan mampu:
case_when().if_else().ifelse().dplyr untuk pengolahan data dan percabangan.knitr untuk menampilkan tabel pada HTML.Proses pengolahan data dilakukan melalui tahapan berikut:
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.
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.
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")
| Nama | Nilai |
|---|---|
| Andi | 80 |
| Budi | 85 |
| Citra | 90 |
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.Factor digunakan untuk merepresentasikan data kategori dengan tingkat tertentu. Contohnya adalah grade A, B, C, dan D.
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:
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.
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.
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"
)
| 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.
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"
)
| 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.
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"
)
| 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.
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"
)
| 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.
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"
)
| 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.
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"
)
| 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.
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"
)
| 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%.
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"
)
| 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.
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"
)
| 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.
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.
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"
)
| 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.
distribusi_grade <- as.data.frame(
table(Grade)
)
names(distribusi_grade) <- c("Grade", "Jumlah")
kable(
distribusi_grade,
caption = "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.
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"
)
| 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.
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.
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.
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.