Tugas Individu Pemrograman Statistika

Author

Freditasari Purwa Hidayat (M0501251052)

Soal 1 - Analisis Skor Ujian

Menambahkan Nama Mahasiswa ke dalam vektor nilai

Input nilai dan nama terlebih dahulu, kemudian masukkan nama yang sesuai ke dalam vektor nilai menggunakan fungsi names().

nilai <- c(80, 55, 45, 90, 70, 60, 85, 72, 50, 95, 40, 77)
nama <-c("Andi","Budi","Citra","Dinda","Eka","Farah","Gilang","Hani","Indra","Joko","Kiki","Lina")
names(nilai) <- nama

Membuat Vektor kelulusan

Fungsi ifelse() digunakan untuk menerapkan logika yang mengklasifikasikan mahasiswa ke dalam tiga kategori:

  • Lulus, jika nilai ≥60.

  • Perbaikan, jika nilai ≥45 (namun kurang dari 60).

  • Tidak Lulus, jika nilai <45.

Output dari proses ini disimpan dalam variabel status.

cat("\n=== STATUS MAHASISWA ===\n")
status <- ifelse(nilai >= 60, "Lulus",
                 ifelse(nilai >=45, "Perbaikan", "Tidak Lulus"))
print(status)

=== STATUS MAHASISWA ===
         Andi          Budi         Citra         Dinda           Eka 
      "Lulus"   "Perbaikan"   "Perbaikan"       "Lulus"       "Lulus" 
        Farah        Gilang          Hani         Indra          Joko 
      "Lulus"       "Lulus"       "Lulus"   "Perbaikan"       "Lulus" 
         Kiki          Lina 
"Tidak Lulus"       "Lulus" 

Mencetak Pesan personal untuk setiap mahasiswa

Fungsi for digunakan untuk perulangan yang dimulai dari i atau 1 sampai dengan panjang vektor nilai yaitu 12. Kemudian menggunakan paste(0) untuk mencetak masing-masing nama dan nilai mahasiwa dengan status yang sudah didefinisikan.

for (i in 1:length(nilai)) {
  cat(paste0(nama[i], ": Nilai = ", nilai[i], ", status = ", status[i],"\n"))
}
Andi: Nilai = 80, status = Lulus
Budi: Nilai = 55, status = Perbaikan
Citra: Nilai = 45, status = Perbaikan
Dinda: Nilai = 90, status = Lulus
Eka: Nilai = 70, status = Lulus
Farah: Nilai = 60, status = Lulus
Gilang: Nilai = 85, status = Lulus
Hani: Nilai = 72, status = Lulus
Indra: Nilai = 50, status = Perbaikan
Joko: Nilai = 95, status = Lulus
Kiki: Nilai = 40, status = Tidak Lulus
Lina: Nilai = 77, status = Lulus

Menghitung Proporsi Lulus, Perbaikan dan Tidak Lulus

Menghitung nilai proporsi menggunakan fungsi table() untuk menghitung jumlah mahasiswa per status, dan prop.table() untuk menghitung proporsinya.

cat("\n=== PROPORSI TIAP MAHASISWA ===\n")
table_status <- table(status)
proporsi <- prop.table(table_status)
print(proporsi)

=== PROPORSI TIAP MAHASISWA ===
status
      Lulus   Perbaikan Tidak Lulus 
 0.66666667  0.25000000  0.08333333 

Mencari Nilai Tertinggi

Menggunakan fungsi max() untuk mencari nilai tertinggi dari mahasiswa dan which() untuk menemukan mahasiswa dengan nilai tertinggi dan mencetak dengan rapi menggunakan fungsi sprintf().

nilai_tertinggi <- max(nilai)
mahasiswa_tertinggi <- names(nilai)[which(nilai == nilai_tertinggi)]
cat(sprintf("Mahasiswa dengan Nilai Tertinggi adalah %s dengan nilai %d", mahasiswa_tertinggi, nilai_tertinggi))
Mahasiswa dengan Nilai Tertinggi adalah Joko dengan nilai 95

Soal 2 - Evaluasi Penjualan Produk

Menyimpan data penjualan ke dalam matriks penjualan

Input data penjualan 3 produk (A, B, C) selama 5 hari (H1-H5)

data_penjualan <- c(12, 15, 18, 10, 20,
               8, 12, 10, 9, 14,
               20, 18, 22, 25, 24)

Membuat matriks penjualan dengan fungsi nrow untuk membuat 3 baris (produk) dan ncol untuk membuat 4 kolom (hari).

penjualan <- matrix(data_penjualan, nrow = 3, ncol = 5, byrow = TRUE)

Memberi nama baris menggunakan fungsi rownames() dan kolom menggunakan fungsi colnames pada matriks penjualan.

cat("\n=== MATRIKS PENJUALAN ===\n")
rownames(penjualan) <- c("A", "B", "C")
colnames(penjualan) <- c("H1", "H2", "H3", "H4", "H5")
print(penjualan)

=== MATRIKS PENJUALAN ===
  H1 H2 H3 H4 H5
A 12 15 18 10 20
B  8 12 10  9 14
C 20 18 22 25 24

Menghitung total penjualan tiap produk dan tiap hari

Perhitungan total penjualan per produk dilakukan dengan fungsi rowSums() dari matriks penjualan, sementara total penjualan per hari dihitung menggunakan colSums(), dan hasilnya dicetak menggunakan print().

cat("\n=== TOTAL PENJUALAN ===\n")

# Total penjualan tiap produk (per baris)
total_per_produk <- rowSums(penjualan)
cat("Total penjualan per produk:\n")
print(total_per_produk)

# Total penjualan tiap hari (per kolom)
total_per_hari <- colSums(penjualan)
cat("\nTotal penjualan per hari:\n")
print(total_per_hari)

=== TOTAL PENJUALAN ===
Total penjualan per produk:
  A   B   C 
 75  53 109 

Total penjualan per hari:
H1 H2 H3 H4 H5 
40 45 50 44 58 

Mencari hari dengan penjualan tertinggi untuk produk C

Membuat vektor baru bernama produk_c untuk menyimpan data penjualan produk C, dan which.max() untuk menemukan posisi nilai maksimum.

produk_c <- penjualan["C", ]
hari_tertinggi_c <- which.max(produk_c)

cat(sprintf("Hari dengan penjualan tertinggi untuk produk C: %s\n", 
            names(hari_tertinggi_c)))
Hari dengan penjualan tertinggi untuk produk C: H4

Menampilkan pesan total penjualan untuk setiap produk

Mengambil nama baris dari matriks penjualan dan menyimpannya dalam variabel nama_produk sebagai vector baru. Lalu digunakan fungsi for untuk membuat perulangan dari 1 hingga jumlah produk. Fungsi sprintf() membuat string terformat dengan placeholder %s = untuk nama produk dan %d = untuk total penjualan.

nama_produk <- rownames(penjualan)
for(i in 1:length(nama_produk)) {
  cat(sprintf("Total penjualan produk %s selama 5 hari: %d unit\n", 
              nama_produk[i], total_per_produk[i]))
}
Total penjualan produk A selama 5 hari: 75 unit
Total penjualan produk B selama 5 hari: 53 unit
Total penjualan produk C selama 5 hari: 109 unit

Membuat matriks baru penjualan_bonus yang menambahkan 10% unit penjualan pada setiap produk

Membuat matriks baru dengan bonus 10% dengan rumus nilai + (nilai × 0.1) dipersingkat dengan mengalikan penjualan dengan 1.1, kemudian mencetak hasil menggunakan fungsi cat dan print untuk menampilkan hasilnya menjadi lebih rapi.

cat("\n=== MATRIKS PENJUALAN DENGAN BONUS 10% ===\n")
penjualan_bonus <- penjualan * 1.1
print(round(penjualan_bonus, ))

=== MATRIKS PENJUALAN DENGAN BONUS 10% ===
  H1 H2 H3 H4 H5
A 13 16 20 11 22
B  9 13 11 10 15
C 22 20 24 28 26

Soal 3 - Sistem Klasifikasi Barang

Mengubah vektor kategori menjadi faktor berurutan dengan kualitas terbaik secara berurutan adalah A, B, C

Input data kategori kualitas 10 produk dan disimpan dengan vektor kategori.

kategori <- c("B", "A", "C", "B", "A", "C", "B", "B", "A", "C")

Kualitas terbaik secara berurutan menggunakan fungsi factor dengan level A lebih baik dari pada B dan B lebih baik daripada C, dan fungsi ordered = TRUE membuat faktor berurutan.

kategori_factor <- factor(kategori, levels = c("A", "B", "C"), ordered = TRUE)

Menghitung jumlah produk untuk tiap kategori kualitas

Fungsi table() digunakan untuk menghitung frekuensi setiap kategori A, B, dan C dari vektor kategori_factor.

cat("\n=== JUMLAH PRODUK PER KATEGORI ===\n")
jumlah_per_kategori <- table(kategori_factor)
print(jumlah_per_kategori)

=== JUMLAH PRODUK PER KATEGORI ===
kategori_factor
A B C 
3 4 3 

Membuat vektor keterangan

Untuk membuat vektor keterangan digunakan fungsi ifelse dengan aturan jika kategori A maka sangat bagus, kategori B maka Bagus, dan jika kategori C maka Perlu Perbaikan.

keterangan <-  ifelse(kategori == "A", "Sangat Bagus",
              ifelse(kategori == "B", "Bagus", "Perlu Perbaikan"))

Mebuat vektor baru kode_barang dengan format: “BRG-01”

Mencetak kode dengan fungsi sprintf() dengan %02d adalah format angka dengan 2 digit, menambahkan angka 0 di depan, dan panjangnya adalah 1 sampai dengan jumlah data kaetgori.

kode_barang <- sprintf("BRG-%02d", 1:length(kategori))
cat("\n=== KODE BARANG ===\n")
print(kode_barang)

=== KODE BARANG ===
 [1] "BRG-01" "BRG-02" "BRG-03" "BRG-04" "BRG-05" "BRG-06" "BRG-07" "BRG-08"
 [9] "BRG-09" "BRG-10"

Mencetak pesan untuk produk yang “Perlu Perbaikan”

Mencari posisi/indeks yg memenuhi kondisi “Perlu Perbaikan” menggunakan fungsi which(). Lalu mencetak banyaknya data yang memenuhi kondisi tersebut dari vektor indeks_perlu_perbaikan.

cat("\n=== PRODUK YANG PERLU PERBAIKAN ===\n")
indeks_perlu_perbaikan <- which(keterangan == "Perlu Perbaikan")

for(i in indeks_perlu_perbaikan) {
  cat(sprintf("Produk %s adalah produk yang perlu perbaikan\n", kode_barang[i]))
}

=== PRODUK YANG PERLU PERBAIKAN ===
Produk BRG-03 adalah produk yang perlu perbaikan
Produk BRG-06 adalah produk yang perlu perbaikan
Produk BRG-10 adalah produk yang perlu perbaikan

Dapat juga dibuat ringkasan lengkap dari semua produk menggunakan data frame untuk memudahkan membaca.

cat("\n=== RINGKASAN SEMUA PRODUK ===\n")
ringkasan <- data.frame(
  Kode_Barang = kode_barang,
  Kategori = kategori,
  Keterangan = keterangan,
  stringsAsFactors = FALSE
)
print(ringkasan)

=== RINGKASAN SEMUA PRODUK ===
   Kode_Barang Kategori      Keterangan
1       BRG-01        B           Bagus
2       BRG-02        A    Sangat Bagus
3       BRG-03        C Perlu Perbaikan
4       BRG-04        B           Bagus
5       BRG-05        A    Sangat Bagus
6       BRG-06        C Perlu Perbaikan
7       BRG-07        B           Bagus
8       BRG-08        B           Bagus
9       BRG-09        A    Sangat Bagus
10      BRG-10        C Perlu Perbaikan

Soal 4 - Monitoring Suhu Harian

Menginput data suhu udara dalam 7 hari terakhir (°C) disimpan dengan vektor suhu.

suhu <- c(28.5, 30.2, 29.8, 31.0, 33.5, 27.5, 26.8)

Menghitung suhu rata-rata menggunakan fungsi mean() , nilai maksimum dengan fungsi max(), dan nilai minimum dengan fungsi min(),

suhu_rata <- mean(suhu)
cat(sprintf("Suhu rata-rata: %.2f°C\n", suhu_rata))
suhu_max <- max(suhu)
cat(sprintf("Suhu maksimum: %.1f°C\n", suhu_max))
suhu_min <- min(suhu)
cat(sprintf("Suhu minimum: %.1f°C\n", suhu_min))
Suhu rata-rata: 29.61°C
Suhu maksimum: 33.5°C
Suhu minimum: 26.8°C

Menambahkan nama hari pada vektor suhu

Membuat vektor nama_hari dengan ketentuan hari terakhir adalah hari tugas diberikan (hari selasa), dan memberikan nama/label pada setiap elemen vektor suhu dengan fungsi names().

nama_hari <- c("Rabu", "Kamis", "Jumat", "Sabtu", "Minggu", "Senin", "Selasa")
names(suhu) <- nama_hari

cat("\n=== DATA SUHU DENGAN NAMA HARI ===\n")
print(suhu)

=== DATA SUHU DENGAN NAMA HARI ===
  Rabu  Kamis  Jumat  Sabtu Minggu  Senin Selasa 
  28.5   30.2   29.8   31.0   33.5   27.5   26.8 

Membuat vektor status suhu per hari

Membuat vektor status dengan ketentuan jika suhu <=30 adalah Normal, jika suhu >30 adalah Panas, dan memberikan nama/label pada setiap elemen vektor status dengan fungsi names().

status <- ifelse(suhu <= 30, "Normal", "Panas")
names(status) <- nama_hari

cat("\n=== STATUS SUHU PER HARI ===\n")
for(i in 1:length(suhu)) {
  cat(sprintf("%s: %.1f°C - %s\n", names(suhu)[i], suhu[i], status[i]))
}

=== STATUS SUHU PER HARI ===
Rabu: 28.5°C - Normal
Kamis: 30.2°C - Panas
Jumat: 29.8°C - Normal
Sabtu: 31.0°C - Panas
Minggu: 33.5°C - Panas
Senin: 27.5°C - Normal
Selasa: 26.8°C - Normal

Menampilkan daftar hari dengan suhu di atas rata-rata

Mencetak hari dimana suhu diatas rata-rata yaitu 29.61°C menggunakan perintah print() dari vektor suhu_rata dan dengan operator >, lalu mengambil elemen suhu kondisi yang benar/sesuai.

cat(sprintf("\n=== HARI DENGAN SUHU DI ATAS RATA-RATA (%.2f°C) ===\n", suhu_rata))
print(suhu[suhu > suhu_rata])

=== HARI DENGAN SUHU DI ATAS RATA-RATA (29.61°C) ===
 Kamis  Jumat  Sabtu Minggu 
  30.2   29.8   31.0   33.5 

Menggunakan looping untuk meminta pengguna memasukkan nama hari dalam format UpperCamelCase

Fungsi while(TRUE) digunakan agar program berjalan terus-menerus pada setiap iterasi, lalu pengguna diminta memasukkan nama hari melalui fungsi readline(), dan hasil input disimpan pada variabel input_hari. Laluif(input_hari %in% nama_hari) untuk memvalidasi apakah input terdapat dalam vektor nama_hari. Jika valid, program menampilkan informasi nama hari, suhu, dan status menggunakan fungsi cat() dan sprintf() untuk memformat keluaran agar lebih rapi. Namun, jika input tidak sesuai, program akan menghentikan perulangan dengan perintah break.

while(TRUE) {
  cat("\n=== PENCARIAN SUHU PER HARI ===\n")
  input_hari <- readline(prompt = "Masukkan nama hari: ")

  if(input_hari %in% nama_hari) {
    cat(sprintf("Hari %s: Suhu %.1f°C - Status: %s\n",
                input_hari, suhu[input_hari], status[input_hari]))
  } else {
    cat("Hari tidak ditemukan. Program dihentikan.\n")
    break
  }
}

=== PENCARIAN SUHU PER HARI ===
Masukkan nama hari: 
Hari tidak ditemukan. Program dihentikan.

Menghitung persentase hari yang dikategorikan Panas

Menggunakan fungsi sum() untuk menjumlahkan suhu yang hanya mempunyai kategori panas, kemudian menghitung panjang vektor yang memenuhi syarat (jumlah hari). Dengan membagi jumlah_hari_panas dibagi dan total_hari dikali 100 maka akan mendapatkan % hari yang panas.

jumlah_hari_panas <- sum(status == "Panas")
total_hari <- length(status)
persentase_panas <- (jumlah_hari_panas / total_hari) * 100

cat(sprintf("Jumlah hari dengan status 'Panas': %d dari %d hari\n", 
            jumlah_hari_panas, total_hari))
cat(sprintf("Persentase hari panas: %.1f%%\n", persentase_panas))
Jumlah hari dengan status 'Panas': 3 dari 7 hari
Persentase hari panas: 42.9%