Soal Praktikum R – Tingkat Lanjut (Data Konkret)

Bagian A : Data Cuaca

#a.Hitung rata-rata, median, standar deviasi suhu
suhu <- c(32, 33, 31, 34, 35, 30, 29, 33, 32, 34)
rata_rata <- mean(suhu)
print(paste("Rata-rata:", rata_rata))
## [1] "Rata-rata: 32.3"
nilai_tengah <- median(suhu)
print(paste("Median:", nilai_tengah))
## [1] "Median: 32.5"
standar_deviasi <- sd(suhu)
print(paste("Standar Deviasi:", standar_deviasi))
## [1] "Standar Deviasi: 1.88856206322871"
#b.Cari hari dengan suhu tertinggi
max_hari <- which.max(suhu)
max_suhu <- max(suhu)
print(paste("Suhu tertinggi adalah", max_suhu, "°C yang terjadi pada hari ke-", max_hari))
## [1] "Suhu tertinggi adalah 35 °C yang terjadi pada hari ke- 5"
#c.Tentukan berapa hari dengan suhu di atas rata-rata
jumlah_hari <- sum(suhu > mean(suhu))
print(paste("Terdapat", jumlah_hari, "hari dengan suhu di atas rata-rata."))
## [1] "Terdapat 5 hari dengan suhu di atas rata-rata."

Bagian B : Data Transportasi

#a.Buat data frame df_transport dari data di atas
penumpang <- c(45, 52, 49, 60, 55, 70, 65)
hari <- c("Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu")

df_transport <- data.frame(hari = hari, penumpang = penumpang)
print(df_transport)
##     hari penumpang
## 1  Senin        45
## 2 Selasa        52
## 3   Rabu        49
## 4  Kamis        60
## 5  Jumat        55
## 6  Sabtu        70
## 7 Minggu        65
#b.Hitung rata-rata jumlah penumpang pada hari kerja (Senin–Jumat)
rata_rata_kerja <- mean(df_transport$penumpang[1:5])

print(paste("Rata-rata penumpang hari kerja:", rata_rata_kerja, "ribu orang"))
## [1] "Rata-rata penumpang hari kerja: 52.2 ribu orang"
#c.Cari hari dengan penumpang terbanyak
hari_terbanyak <- df_transport$hari[which.max(df_transport$penumpang)]
max_penumpang <- max(df_transport$penumpang)

print(paste("Penumpang terbanyak terjadi pada hari", hari_terbanyak, "dengan", max_penumpang, "ribu orang"))
## [1] "Penumpang terbanyak terjadi pada hari Sabtu dengan 70 ribu orang"
#d.Berapa persen peningkatan jumlah penumpang dari hari Senin ke Sabtu? 
penumpang_senin <- df_transport$penumpang[df_transport$hari == "Senin"]
penumpang_sabtu <- df_transport$penumpang[df_transport$hari == "Sabtu"]

peningkatan <- ((penumpang_sabtu - penumpang_senin)/penumpang_senin)*100
print(paste("Persentase peningkatan penumpang dari senin ke sabtu yaitu", round(peningkatan, 2), "%"))
## [1] "Persentase peningkatan penumpang dari senin ke sabtu yaitu 55.56 %"

Bagian C : Data Ekonomi

#a.Buat data frame df_beras berisi minggu dan harga
harga_beras <- c(12000, 12200, 12150, 12300, 12400, 12500, 12600, 12750)
minggu <- 1:8

df_beras <- data.frame(minggu = minggu, harga = harga_beras)
print(df_beras)
##   minggu harga
## 1      1 12000
## 2      2 12200
## 3      3 12150
## 4      4 12300
## 5      5 12400
## 6      6 12500
## 7      7 12600
## 8      8 12750
#b.Hitung rata-rata kenaikan harga per minggu
selisih_harga <- diff(df_beras$harga)
print(selisih_harga)
## [1] 200 -50 150 100 100 100 150
#c.Gunakan fungsi diff() untuk menghitung selisih harga antar minggu
rata_rata_kenaikan <- mean(selisih_harga)
print(paste("Rata-rata kenaikan harga per minggu adalah Rp", round(rata_rata_kenaikan,2)))
## [1] "Rata-rata kenaikan harga per minggu adalah Rp 107.14"
#d.Tentukan minggu dengan kenaikan harga tertinggi 
indeks_max <- which.max(selisih_harga)
kenaikan_max <- max(selisih_harga)

minggu_tertinggi <- df_beras$minggu[indeks_max + 1]
print(paste("Kenaikan harga tertinggi sebesar Rp", kenaikan_max, "terjadi pada minggu ke-", minggu_tertinggi))
## [1] "Kenaikan harga tertinggi sebesar Rp 200 terjadi pada minggu ke- 2"

Bagian D : Matriks Populasi

populasi <- matrix(c(
50, 55, 60, 65, # Kecamatan A 
40, 42, 45, 47, # Kecamatan B 
70, 72, 74, 76 # Kecamatan C
), nrow=3, byrow=TRUE)

rownames(populasi) <- c("Kec_A", "Kec_B", "Kec_C")
colnames(populasi) <- c("2019", "2020", "2021", "2022")
print(populasi)
##       2019 2020 2021 2022
## Kec_A   50   55   60   65
## Kec_B   40   42   45   47
## Kec_C   70   72   74   76
#a.Hitung pertumbuhan penduduk rata-rata tiap kecamatan dengan apply()
rata_pertumbuhan <- apply(populasi, 1, function(x) mean(diff(x)))
print(rata_pertumbuhan)
##    Kec_A    Kec_B    Kec_C 
## 5.000000 2.333333 2.000000
#b.Tentukan kecamatan dengan populasi tertinggi pada tahun 2022
indeks_max_2022 <- which.max(populasi[, "2022"])
kec_tertinggi <- rownames(populasi)[indeks_max_2022]
populasi_max <- max(populasi[, "2022"])

print(paste("Populasi tertinggi pada tahun 2022 berada di", kec_tertinggi, "dengan", populasi_max, "ribu penduduk"))
## [1] "Populasi tertinggi pada tahun 2022 berada di Kec_C dengan 76 ribu penduduk"
#c.Hitung total penduduk tiap tahun 
total_per_tahun <- colSums(populasi)
print(total_per_tahun)
## 2019 2020 2021 2022 
##  160  169  179  188

Bagian E : Fungsi Custom

#a.Buatlah fungsi deteksi_kenaikan()
deteksi_kenaikan <- function(harga){
  selisih <- diff(harga)
  minggu_kenaikan <- which(selisih > 200) + 1
  if (length(minggu_kenaikan) == 0){
    return("Tidak ada kenaikan harga yang melebihi 200 rupiah")
    return(minggu_kenaikan)
  }
}

#b.Uji fungsi ini pada data harga beras di Bagian C
harga_beras <- c(12000, 12200, 12150, 12300, 12400, 12500, 12600, 12750)
hasil_uji <- deteksi_kenaikan(harga_beras)
print(hasil_uji)
## [1] "Tidak ada kenaikan harga yang melebihi 200 rupiah"