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) <- namaTugas Individu Pemrograman Statistika
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().
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%