1 Kasus

Seorang dosen memiliki data nilai Tugas, UTS, dan UAS dari 10 mahasiswa (data sintesis). Nilai akhir dihitung dengan bobot 30% Tugas, 30% UTS, 40% UAS. Mahasiswa lulus jika nilai akhir minimal 60. Grade ditentukan dari nilai akhir:

Nilai akhir Grade
>= 85 A
80 - < 85 A-
75 - < 80 B+
70 - < 75 B
65 - < 70 B-
60 - < 65 C+
< 60 Tidak Lulus

Dosen ingin mengetahui nilai akhir, status kelulusan, grade, statistik nilai, persentase kelulusan, dan mahasiswa dengan nilai tertinggi.

2 Algoritma

Bagian Isi
Input Nama, jenis kelamin, nilai Tugas, UTS, UAS
Process Hitung nilai akhir; tentukan status dan grade; hitung statistik dan persentase lulus
Output Tabel hasil, statistik ringkasan, persentase kelulusan

3 Penyelesaian

3.1 Langkah 1: Membuat data mahasiswa

library(dplyr)

nama  <- c("Nadine Alodia Bandini", "Zaid Dian Prasetyo", "Nafa Erlinda Salsabila", "Pandu Pandita Adiguna Wijaya", "Nakeysha Zahira Childa",
           "Raditya Octavian Pangestu", "Nazwa Aulia Larasati", "Rafie Hasbi Shidqy", "Rr Lintangmas Pindho Prameswari", "Nova Eka Fadhilah")
JK    <- rep(c("P", "L"), 5)
tugas <- c(80, 65, 90, 75, 55, 88, 70, 95, 60, 78)
UTS   <- c(75, 70, 85, 80, 60, 82, 65, 90, 55, 72)
UAS   <- c(85, 60, 88, 78, 58, 90, 72, 92, 65, 70)

TABEL <- data.frame(nama, JK, tugas, UTS, UAS)
TABEL
##                               nama JK tugas UTS UAS
## 1            Nadine Alodia Bandini  P    80  75  85
## 2               Zaid Dian Prasetyo  L    65  70  60
## 3           Nafa Erlinda Salsabila  P    90  85  88
## 4     Pandu Pandita Adiguna Wijaya  L    75  80  78
## 5           Nakeysha Zahira Childa  P    55  60  58
## 6        Raditya Octavian Pangestu  L    88  82  90
## 7             Nazwa Aulia Larasati  P    70  65  72
## 8               Rafie Hasbi Shidqy  L    95  90  92
## 9  Rr Lintangmas Pindho Prameswari  P    60  55  65
## 10               Nova Eka Fadhilah  L    78  72  70

3.2 Langkah 2: Menghitung nilai akhir

TABEL$Nilai_Akhir <- 0.30 * TABEL$tugas +
                     0.30 * TABEL$UTS +
                     0.40 * TABEL$UAS
TABEL$Nilai_Akhir
##  [1] 80.5 64.5 87.7 77.7 57.7 87.0 69.3 92.3 60.5 73.0

3.3 Langkah 3: Menentukan status kelulusan

TABEL$Status <- ifelse(TABEL$Nilai_Akhir >= 60, "Lulus", "Tidak Lulus")
TABEL[, c("nama", "Nilai_Akhir", "Status")]
##                               nama Nilai_Akhir      Status
## 1            Nadine Alodia Bandini        80.5       Lulus
## 2               Zaid Dian Prasetyo        64.5       Lulus
## 3           Nafa Erlinda Salsabila        87.7       Lulus
## 4     Pandu Pandita Adiguna Wijaya        77.7       Lulus
## 5           Nakeysha Zahira Childa        57.7 Tidak Lulus
## 6        Raditya Octavian Pangestu        87.0       Lulus
## 7             Nazwa Aulia Larasati        69.3       Lulus
## 8               Rafie Hasbi Shidqy        92.3       Lulus
## 9  Rr Lintangmas Pindho Prameswari        60.5       Lulus
## 10               Nova Eka Fadhilah        73.0       Lulus

3.4 Langkah 4: Menentukan grade

TABEL$Grade <- case_when(
  TABEL$Nilai_Akhir >= 85 ~ "A",
  TABEL$Nilai_Akhir >= 80 ~ "A-",
  TABEL$Nilai_Akhir >= 75 ~ "B+",
  TABEL$Nilai_Akhir >= 70 ~ "B",
  TABEL$Nilai_Akhir >= 65 ~ "B-",
  TABEL$Nilai_Akhir >= 60 ~ "C+",
  TRUE ~ "Tidak Lulus"
)
TABEL[, c("nama", "Nilai_Akhir", "Status", "Grade")]
##                               nama Nilai_Akhir      Status       Grade
## 1            Nadine Alodia Bandini        80.5       Lulus          A-
## 2               Zaid Dian Prasetyo        64.5       Lulus          C+
## 3           Nafa Erlinda Salsabila        87.7       Lulus           A
## 4     Pandu Pandita Adiguna Wijaya        77.7       Lulus          B+
## 5           Nakeysha Zahira Childa        57.7 Tidak Lulus Tidak Lulus
## 6        Raditya Octavian Pangestu        87.0       Lulus           A
## 7             Nazwa Aulia Larasati        69.3       Lulus          B-
## 8               Rafie Hasbi Shidqy        92.3       Lulus           A
## 9  Rr Lintangmas Pindho Prameswari        60.5       Lulus          C+
## 10               Nova Eka Fadhilah        73.0       Lulus           B

3.5 Langkah 5: Statistik nilai akhir

mean(TABEL$Nilai_Akhir)
## [1] 75.02
min(TABEL$Nilai_Akhir)
## [1] 57.7
max(TABEL$Nilai_Akhir)
## [1] 92.3
sd(TABEL$Nilai_Akhir)
## [1] 12.01109
summary(TABEL$Nilai_Akhir)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   57.70   65.70   75.35   75.02   85.38   92.30

3.6 Langkah 6: Jumlah dan persentase kelulusan

jumlah_lulus <- sum(TABEL$Status == "Lulus")
jumlah_lulus
## [1] 9
persentase_lulus <- jumlah_lulus / nrow(TABEL) * 100
persentase_lulus
## [1] 90

3.7 Langkah 7: Mahasiswa dengan nilai tertinggi

tertinggi <- TABEL$nama[which.max(TABEL$Nilai_Akhir)]
tertinggi
## [1] "Rafie Hasbi Shidqy"

3.8 Langkah 8: Rata-rata nilai akhir berdasarkan jenis kelamin

TABEL$rata2_Ujian_JK <- ave(TABEL$Nilai_Akhir, TABEL$JK, FUN = mean)
TABEL[, c("nama", "JK", "Nilai_Akhir", "rata2_Ujian_JK")]
##                               nama JK Nilai_Akhir rata2_Ujian_JK
## 1            Nadine Alodia Bandini  P        80.5          71.14
## 2               Zaid Dian Prasetyo  L        64.5          78.90
## 3           Nafa Erlinda Salsabila  P        87.7          71.14
## 4     Pandu Pandita Adiguna Wijaya  L        77.7          78.90
## 5           Nakeysha Zahira Childa  P        57.7          71.14
## 6        Raditya Octavian Pangestu  L        87.0          78.90
## 7             Nazwa Aulia Larasati  P        69.3          71.14
## 8               Rafie Hasbi Shidqy  L        92.3          78.90
## 9  Rr Lintangmas Pindho Prameswari  P        60.5          71.14
## 10               Nova Eka Fadhilah  L        73.0          78.90

3.9 Langkah 9: Menampilkan hasil

cat("Jumlah mahasiswa     :", nrow(TABEL), "\n")
## Jumlah mahasiswa     : 10
cat("Rata-rata nilai akhir:", round(mean(TABEL$Nilai_Akhir), 2), "\n")
## Rata-rata nilai akhir: 75.02
cat("Jumlah lulus         :", jumlah_lulus, "\n")
## Jumlah lulus         : 9
cat("Persentase lulus     :", persentase_lulus, "%\n")
## Persentase lulus     : 90 %
cat("Nilai tertinggi      :", tertinggi, "\n")
## Nilai tertinggi      : Rafie Hasbi Shidqy
TABEL
##                               nama JK tugas UTS UAS Nilai_Akhir      Status
## 1            Nadine Alodia Bandini  P    80  75  85        80.5       Lulus
## 2               Zaid Dian Prasetyo  L    65  70  60        64.5       Lulus
## 3           Nafa Erlinda Salsabila  P    90  85  88        87.7       Lulus
## 4     Pandu Pandita Adiguna Wijaya  L    75  80  78        77.7       Lulus
## 5           Nakeysha Zahira Childa  P    55  60  58        57.7 Tidak Lulus
## 6        Raditya Octavian Pangestu  L    88  82  90        87.0       Lulus
## 7             Nazwa Aulia Larasati  P    70  65  72        69.3       Lulus
## 8               Rafie Hasbi Shidqy  L    95  90  92        92.3       Lulus
## 9  Rr Lintangmas Pindho Prameswari  P    60  55  65        60.5       Lulus
## 10               Nova Eka Fadhilah  L    78  72  70        73.0       Lulus
##          Grade rata2_Ujian_JK
## 1           A-          71.14
## 2           C+          78.90
## 3            A          71.14
## 4           B+          78.90
## 5  Tidak Lulus          71.14
## 6            A          78.90
## 7           B-          71.14
## 8            A          78.90
## 9           C+          71.14
## 10           B          78.90

4 Kesimpulan

Dari 10 mahasiswa, seluruh hasil (nilai akhir, status, grade, dan statistik) diperoleh dengan percabangan ifelse() dan case_when() serta fungsi statistik dasar R.