nilai <- c(80, 55, 45, 90, 70, 60, 85, 72, 50, 95, 40, 77)Tugas Pemrograman Statistika Pararel 2
1. Analisis Skor Ujian
a. Menambahkan nama mahasiswa pada elemen vektor nilai agar setiap nilai memiliki nama masing-masing
#Membuat vektor Nama yang jumlahnya sama dengan panjang vektor nilai
#Kemudian menjalankan fungsi names(nilai)
Nama <- c("Andi", "Budi", "Citra", "Dinda", "Eka", "Farah", "Gilang", "Hani", "Indra", "Joko", "Kiki", "Lina")
names(nilai) <- Nama
nilai Andi Budi Citra Dinda Eka Farah Gilang Hani Indra Joko Kiki
80 55 45 90 70 60 85 72 50 95 40
Lina
77
b. Membuat vektor baru kelulusan dengan kriteria:
“Lulus” jika nilai ≥ 60
“Perbaikan” jika 45 ≤ nilai < 60
“Tidak Lulus” jika nilai < 45
Untuk mendapatkan vektor kelulusan dengan 3 kriteria di atas, maka digunakan fungsi ifelse()sebagai berikut:
kelulusan <- ifelse(nilai >= 60, "Lulus",
ifelse(nilai >= 45, "Perbaikan", "Tidak Lulus"))
kelulusan 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"
c. Mencetak pesan personal untuk tiap mahasiswa
Untuk mencetak pesan digunakan Fungsi paste0 yang digunakan untuk menggabungkan (concatenate) tanpa spasi beberapa teks menjadi satu dalam hal ini memuat juga “nilai” dan “Status”
PesanPersonal <- paste0(Nama,": Nilai = ", nilai, ", Status= ", kelulusan)
print(PesanPersonal) [1] "Andi: Nilai = 80, Status= Lulus"
[2] "Budi: Nilai = 55, Status= Perbaikan"
[3] "Citra: Nilai = 45, Status= Perbaikan"
[4] "Dinda: Nilai = 90, Status= Lulus"
[5] "Eka: Nilai = 70, Status= Lulus"
[6] "Farah: Nilai = 60, Status= Lulus"
[7] "Gilang: Nilai = 85, Status= Lulus"
[8] "Hani: Nilai = 72, Status= Lulus"
[9] "Indra: Nilai = 50, Status= Perbaikan"
[10] "Joko: Nilai = 95, Status= Lulus"
[11] "Kiki: Nilai = 40, Status= Tidak Lulus"
[12] "Lina: Nilai = 77, Status= Lulus"
d. Menghitung proporsi mahasiswa yang lulus, perbaikan, dan tidak lulus
Nilai proporsi diperoleh dengan menggunakan fungsi table() untuk menghitung jumlah mahasiswa per status yang kemudian dibagi jumlah elemen Nama dan agar lebih rapi dibulatkan dengan 2 angka dibelakang koma menggunakan round( ,2)
proporsi <- print(round(table(kelulusan)/length(Nama),2))kelulusan
Lulus Perbaikan Tidak Lulus
0.67 0.25 0.08
e. Menampilkan mahasiswa dengan nilai tertinggi
Mencari nilai tertinggi dari mahasiswa menggunakan fungsi max() dan which() untuk menemukan mahasiswa yang mempunyai nilai tertinggi, serta mencetaknya dengan rapi menggunakan fungsi paste()
paste("Mahasiswa dengan nilai tertinggi yaitu", Nama[which.max(nilai)], "dengan nilai", max(nilai))[1] "Mahasiswa dengan nilai tertinggi yaitu Joko dengan nilai 95"
2. Evaluasi Penjualan Produk
Sebuah toko memiliki data penjualan 3 produk (A, B, C) selama 5 hari:
| Produk | H1 | H2 | H3 | H4 | H5 |
|---|---|---|---|---|---|
| A | 12 | 15 | 18 | 10 | 20 |
| B | 8 | 12 | 10 | 9 | 14 |
| C | 20 | 18 | 22 | 25 | 24 |
a. Menyimpan data penjualan ke dalam matriks penjualan.
Data penjualan toko disimpan sebagai vector p, kemudian dijadikan matriks yang mempunyai dimensi 3 baris dan 5 kolom. Data akan diisi baris per baris dan baris dinamai A, B, C serta Kolom dinamai dengan H1, H2, H3, H4, H5
p <- c(12,15,18,10,20,8,12,10,9,14,20,18,22,25,24)
penjualan <- matrix(p,3,5,byrow=TRUE,dimnames = list(c("A","B","C"), paste0("H",1:5)))
penjualan H1 H2 H3 H4 H5
A 12 15 18 10 20
B 8 12 10 9 14
C 20 18 22 25 24
b. Menghitung total penjualan tiap produk dan tiap hari
Total penjualan per produk dihitung dengan fungsi rowSums() dari matriks penjualan, sementara total penjualan per hari dihitung menggunakan colSums()
total.produk<-rowSums(penjualan)
total.hari <- colSums(penjualan)
total.produk A B C
75 53 109
total.hariH1 H2 H3 H4 H5
40 45 50 44 58
c. Mencari hari dengan penjualan tertinggi untuk produk C
Membuat vektor baru hari.tertinggi.C untuk menyimpan data penjualan tertinggi produk C, dan which.max() untuk menemukan posisi tertinggi. Dicetak dengan paste()
hari.tertinggi.C <- colnames(penjualan)[which.max(penjualan["C", ])]
paste("Penjualan tertinggi untuk produk C yaitu di", hari.tertinggi.C)[1] "Penjualan tertinggi untuk produk C yaitu di H4"
d. Menampilkan pesan total penjualan untuk setiap produk
Fungsi for digunakan untuk perulangan dimana untuk setiap produk yang sesuai nama baris pada matriks penjualan. Kemudian menggunakan paste(0) untuk mencetak masing-masing nama produk dengan total penjualan selama 5 hari.
for (produk in rownames(penjualan)) {
print(paste("Total penjualan produk", produk, "selama 5 hari:", total.produk[produk], "unit"))
}[1] "Total penjualan produk A selama 5 hari: 75 unit"
[1] "Total penjualan produk B selama 5 hari: 53 unit"
[1] "Total penjualan produk C selama 5 hari: 109 unit"
e. Membuat matriks baru penjualan_bonus yang menambahkan 10% unit penjualan pada setiap produk
penjualan_bonus<- round(penjualan * 1.1)
penjualan_bonus H1 H2 H3 H4 H5
A 13 16 20 11 22
B 9 13 11 10 15
C 22 20 24 28 26
3. Sistem Klasifikasi Barang
kategori <- c("B", "A", "C", "B", "A", "C", "B", "B", "A", "C")a. Mengubah vektor kategori menjadi faktor berurutan. Kualitas terbaik secara berurutan adalah A, B dan C (A > B > C)
#Output akan menambilkan faktor dengan level C<B<A yang sama artinya bahwa A > B > C
#sehingga penulisan faktor level dimulai dari level terendah yaitu C
kategori.faktor <- factor(kategori, levels = c("C", "B", "A"), ordered = TRUE)
kategori.faktor [1] B A C B A C B B A C
Levels: C < B < A
b. Menghitung jumlah produk untuk tiap kategori kualitas
#Menghitung jumlah produk untuk tiap kategori kualitas dengan table( )
JumlahProduk <- table(kategori)
JumlahProdukkategori
A B C
3 4 3
c. Membuat vektor keterangan dengan aturan:
A → “Sangat Bagus”
B → “Bagus”
C → “Perlu Perbaikan”
keterangan <- c("A"="Sangat Bagus", "B"="Bagus", "C"="Perlu Perbaikan")[kategori]
keterangan B A C B
"Bagus" "Sangat Bagus" "Perlu Perbaikan" "Bagus"
A C B B
"Sangat Bagus" "Perlu Perbaikan" "Bagus" "Bagus"
A C
"Sangat Bagus" "Perlu Perbaikan"
d. Buat vektor baru kode_barang dengan format: “BRG-01”, “BRG-02”, dst
Mencetak kode barang dengan fungsi sprintf() dengan %02d adalah format angka dengan 2 digit, isi dengan angka nol di depan jika angka kurang dari 2 digit, dan panjangnya adalah 1 sampai dengan panjang vektor kategori
kode_barang <- sprintf("BRG-%02d", 1:length(kategori))
kode_barang [1] "BRG-01" "BRG-02" "BRG-03" "BRG-04" "BRG-05" "BRG-06" "BRG-07" "BRG-08"
[9] "BRG-09" "BRG-10"
e. Mencetak pesan untuk produk dengan keterangan “Perlu Perbaikan”
Mencari indeks yg memenuhi kondisi “Perlu Perbaikan” menggunakan fungsi which() yang disimpan dalam vektor indeks , kemudian pesan yang berisi produk dengan kode barangnya adalah produk yang perlu perbaikan dicetak dengan fungsi paste0
indeks <- which(keterangan == "Perlu Perbaikan")
pesan <- paste0("Produk ", kode_barang[indeks],
" adalah produk yang perlu perbaikan")
pesan[1] "Produk BRG-03 adalah produk yang perlu perbaikan"
[2] "Produk BRG-06 adalah produk yang perlu perbaikan"
[3] "Produk BRG-10 adalah produk yang perlu perbaikan"
4. Monitoring Suhu Harian
Data suhu udara selama 7 hari terakhir (dalam °C) dicatat sebagai berikut:
a. Menghitung suhu rata-rata, maksimum, dan minimum
Menghitung suhu rata-rata menggunakan fungsi mean() , nilai maksimum dengan fungsi max(), dan nilai minimum dengan fungsi min(), kemudian menggabungkannya dalam vektor rataan.maks.min
suhu <- c(28.5,30.2,29.8,31.0,33.5,27.5,26.8)
rataan.maks.min <- round(c(Rataan=mean(suhu),Maksimum=max(suhu),Minimum=min(suhu)),1)
rataan.maks.min Rataan Maksimum Minimum
29.6 33.5 26.8
b. Menambahkan nama hari pada vector suhu. Hari terakhir adalah hari tugas ini diberikan.
#Membuat vektor hari yang jumlahnya elemennya sama dengan panjang vektor suhu
#Kemudian menjalankan fungsi names(suhu)
hari <- c("Rabu","Kamis","Jumat","Sabtu","Minggu","Senin","Selasa")
names(suhu) <- hari
suhu Rabu Kamis Jumat Sabtu Minggu Senin Selasa
28.5 30.2 29.8 31.0 33.5 27.5 26.8
c. Buat vektor status dengan ketentuan:
“Normal” jika suhu ≤ 30
“Panas” jika suhu > 30
Untuk mendapatkan vektor status dengan ketentuan di atas, maka digunakan fungsi ifelse() sebagai berikut:
status <- ifelse(suhu <= 30, "Normal", "Panas")
names(status) <- hari
status Rabu Kamis Jumat Sabtu Minggu Senin Selasa
"Normal" "Panas" "Normal" "Panas" "Panas" "Normal" "Normal"
d. Menampilkan daftar hari dengan suhu di atas rata-rata.
Mencetak hasil dengan menggunakan perintah print() yaitu mengambil names(suhu) atau hari dimana suhu diatas rata-rata
print(paste("Hari di atas rata-rata:", paste(names(suhu)[suhu > mean(suhu)], collapse=", ")))[1] "Hari di atas rata-rata: Kamis, Jumat, Sabtu, Minggu"
e. Menggunakan looping untuk meminta pengguna memasukkan nama hari dalam format UpperCamelCase
Fungsi repeat { … } digunakan untuk membuat loop tak terbatas, akan terus berjalan sampai ada break yang menghentikan. Pengguna diminta memasukkan nama hari melalui fungsi readline(), dan hasil input disimpan pada variabel input_hari . Fungsi if akan memeriksa jika nama hari yang dimasukkan pengguna tidak ada dalam daftar hari maka proses akan berhenti, namun jika ada dalam daftar maka akan mencetak Suhu di hari dan status sesuai hasil input pengguna.
# Loop untuk meminta input nama hari dalam format UpperCamelCase dan tampilkan suhu serta status
repeat {
input_hari <- readline(prompt = "Masukkan nama hari dengan huruf awal kapital: ")
if (!(input_hari %in% hari)) break
print(paste("Suhu di", input_hari, ":", suhu[input_hari], "°C, Status:", status[input_hari]))
}Masukkan nama hari dengan huruf awal kapital:
f. Menghitung persentase hari yang dikategorikan Panas
Membuat vektor presentase.panas yang menyimpan hasil perhitungan rata-rata dimana yang dirata-ratakan yang berstatus “Panas” dan dikali 100 dengan jumlah angka dibelakang koma 2 digit. Hasilnya dalam bentuk presentase yang ditampilkan dengan fungsi paste() .
persentase.panas <- round(mean(status == "Panas") * 100,2)
paste("Persentase hari panas yaitu: ", persentase.panas,"%")[1] "Persentase hari panas yaitu: 42.86 %"