R Markdown

library(readxl)
df_mahasiswa <- read_excel("df_mahasiswa.xlsx")
# MENAMPIKAN 6 BARIS PERTAMA

head(df_mahasiswa, 6)
## # A tibble: 6 × 6
##   id_mahasiswa jenis_kelamin jam_belajar_per_hari frekuensi_login_lms
##   <chr>        <chr>                        <dbl>               <dbl>
## 1 MHS001       L                                4                   1
## 2 MHS002       P                                4                   2
## 3 MHS003       P                                2                   6
## 4 MHS004       P                                5                   3
## 5 MHS005       L                                3                   2
## 6 MHS006       L                                3                   7
## # ℹ 2 more variables: motivasi_belajar <dbl>, ipk <dbl>
# MENGECEK STRUKTUR DAN TIPE DATA MAHASISWA

str(df_mahasiswa)
## tibble [55 × 6] (S3: tbl_df/tbl/data.frame)
##  $ id_mahasiswa        : chr [1:55] "MHS001" "MHS002" "MHS003" "MHS004" ...
##  $ jenis_kelamin       : chr [1:55] "L" "P" "P" "P" ...
##  $ jam_belajar_per_hari: num [1:55] 4 4 2 5 3 3 1 3 2 1 ...
##  $ frekuensi_login_lms : num [1:55] 1 2 6 3 2 7 7 4 6 5 ...
##  $ motivasi_belajar    : num [1:55] 82 73 71 98 81 61 44 69 44 46 ...
##  $ ipk                 : num [1:55] 3.12 3.45 3.07 3.43 2.83 3.1 2.98 3.08 2.82 2.93 ...
# MENGECEK MISSING VALUE

summary(df_mahasiswa)
##  id_mahasiswa       jenis_kelamin      jam_belajar_per_hari frekuensi_login_lms
##  Length:55          Length:55          Min.   :1.000        Min.   :1.000      
##  Class :character   Class :character   1st Qu.:2.000        1st Qu.:2.000      
##  Mode  :character   Mode  :character   Median :3.000        Median :4.000      
##                                        Mean   :3.127        Mean   :4.018      
##                                        3rd Qu.:4.000        3rd Qu.:6.000      
##                                        Max.   :5.000        Max.   :7.000      
##  motivasi_belajar      ipk       
##  Min.   : 35.0    Min.   :2.490  
##  1st Qu.: 56.5    1st Qu.:2.955  
##  Median : 73.0    Median :3.130  
##  Mean   : 71.0    Mean   :3.166  
##  3rd Qu.: 87.0    3rd Qu.:3.365  
##  Max.   :100.0    Max.   :3.890
sum(is.na(df_mahasiswa))
## [1] 0
any(is.na(df_mahasiswa))
## [1] FALSE
# MENGETAHUI ADA BERAPA LAKI LAKI DAN PEREMPUAN

table(df_mahasiswa$jenis_kelamin)
## 
##  L  P 
## 32 23
# MENGETAHUI JENIS KELAMIN DENGAN IPK TERTINGGI

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# MENGHITUNG RATA RATA IPK PER JENIS KELAMIN

# Hitung rata-rata IPK per jenis kelamin
rata_rata_ipk <- df_mahasiswa %>%
  group_by(jenis_kelamin) %>%
  summarise(rata_rata_ipk = mean(ipk, na.rm = TRUE),
            jumlah_mahasiswa = n()) 

# Tampilkan hasil
print(rata_rata_ipk)
## # A tibble: 2 × 3
##   jenis_kelamin rata_rata_ipk jumlah_mahasiswa
##   <chr>                 <dbl>            <int>
## 1 L                      3.16               32
## 2 P                      3.18               23
# MENCARI ID MAHASISWA DENGAN MOTIVASI BELAJAR TERTINGGI

max_motivasi <- max(df_mahasiswa$motivasi_belajar, na.rm = TRUE)
print(paste("Nilai motivasi tertinggi:", max_motivasi))
## [1] "Nilai motivasi tertinggi: 100"
id_tertinggi <- df_mahasiswa %>%
  filter(motivasi_belajar == max_motivasi) %>%
  select(id_mahasiswa, jenis_kelamin, motivasi_belajar)

print(id_tertinggi)
## # A tibble: 1 × 3
##   id_mahasiswa jenis_kelamin motivasi_belajar
##   <chr>        <chr>                    <dbl>
## 1 MHS054       L                          100
jumlah_id <- nrow(id_tertinggi)
print(paste("Jumlah ID mahasiswa dengan motivasi tertinggi:", jumlah_id))
## [1] "Jumlah ID mahasiswa dengan motivasi tertinggi: 1"
# MENCARI MAHASISWA DENGAN FREKUENSI LOGIN LMS TERTINGGI JUGA MEMILIKI IPK TINGGI

# Langkah 1: Temukan nilai frekuensi login tertinggi
max_login <- max(df_mahasiswa$frekuensi_login, na.rm = TRUE)
## Warning: Unknown or uninitialised column: `frekuensi_login`.
## Warning in max(df_mahasiswa$frekuensi_login, na.rm = TRUE): no non-missing
## arguments to max; returning -Inf
print(paste("Frekuensi login tertinggi:", max_login))
## [1] "Frekuensi login tertinggi: -Inf"
# Langkah 2: Filter mahasiswa dengan frekuensi login max DAN IPK > 3.5
mahasiswa_kriteria <- df_mahasiswa %>%
  filter(frekuensi_login_lms == max_login & ipk > 3.5) %>%  
  select(id_mahasiswa, jenis_kelamin, frekuensi_login_lms, ipk) 

# Tampilkan hasil
print(mahasiswa_kriteria)
## # A tibble: 0 × 4
## # ℹ 4 variables: id_mahasiswa <chr>, jenis_kelamin <chr>,
## #   frekuensi_login_lms <dbl>, ipk <dbl>
# Langkah 3: Hitung berapa mahasiswa yang memenuhi
jumlah_mahasiswa <- nrow(mahasiswa_kriteria)
if (jumlah_mahasiswa > 0) {
  print(paste("Jumlah mahasiswa yang memenuhi kriteria:", jumlah_mahasiswa))
} else {
  print("Tidak ada mahasiswa yang memenuhi kedua kriteria.")
}
## [1] "Tidak ada mahasiswa yang memenuhi kedua kriteria."
# Temukan nilai max login
max_login <- max(df_mahasiswa$frekuensi_login, na.rm = TRUE)
## Warning: Unknown or uninitialised column: `frekuensi_login`.
## no non-missing arguments to max; returning -Inf
print(paste("Frekuensi login tertinggi:", max_login))
## [1] "Frekuensi login tertinggi: -Inf"
# Filter kondisi: frekuensi == max DAN ipk > 3.5
indeks_kriteria <- which(df_mahasiswa$frekuensi_login_lms == max_login & 
                         df_mahasiswa$ipk > 3.5)

# Ekstrak data mahasiswa
mahasiswa_kriteria <- df_mahasiswa[indeks_kriteria, c("id_mahasiswa", "jenis_kelamin", "frekuensi_login_lms", "ipk")]
print(mahasiswa_kriteria)
## # A tibble: 0 × 4
## # ℹ 4 variables: id_mahasiswa <chr>, jenis_kelamin <chr>,
## #   frekuensi_login_lms <dbl>, ipk <dbl>
# Hitung jumlah
jumlah_mahasiswa <- length(indeks_kriteria)
print(paste("Jumlah mahasiswa yang memenuhi kriteria:", jumlah_mahasiswa))
## [1] "Jumlah mahasiswa yang memenuhi kriteria: 0"
# MAHASISWA DENGAN JAM BELAJAR ≥ 4 JAM PER HARI MEMILIKI IPK LEBIH TINGGI DIBANDINGKAN YANG KURANG DARI 4 JAM

# Langkah 1: Buat kolom kategorikal untuk grup jam belajar
data_grup <- df_mahasiswa %>%
  mutate(grup_jam = ifelse(jam_belajar_per_hari >= 4, ">= 4 jam", "< 4 jam"))

# Langkah 2: Hitung rata-rata IPK per grup
perbandingan_ipk <- data_grup %>%
  group_by(grup_jam) %>%
  summarise(rata_rata_IPK = mean(ipk, na.rm = TRUE), 
            jumlah_mahasiswa = n(), 
            .groups = 'drop') 

# Tampilkan hasil
print(perbandingan_ipk)
## # A tibble: 2 × 3
##   grup_jam rata_rata_IPK jumlah_mahasiswa
##   <chr>            <dbl>            <int>
## 1 < 4 jam           2.94               28
## 2 >= 4 jam          3.41               27
# Langkah 3: Bandingkan secara manual
rata_ge4 <- perbandingan_ipk$rata_rata_IPK[perbandingan_ipk$grup_jam == ">= 4 jam"]
rata_lt4 <- perbandingan_ipk$rata_rata_IPK[perbandingan_ipk$grup_jam == "< 4 jam"]

if (rata_ge4 > rata_lt4) {
  print(paste("Ya, mahasiswa dengan jam belajar >= 4 jam memiliki rata-rata IPK lebih tinggi (", 
              round(rata_ge4, 2), " vs ", round(rata_lt4, 2), ")."))
} else {
  print(paste("Tidak, mahasiswa dengan jam belajar >= 4 jam memiliki rata-rata IPK lebih rendah atau sama (", 
              round(rata_ge4, 2), " vs ", round(rata_lt4, 2), ")."))
}
## [1] "Ya, mahasiswa dengan jam belajar >= 4 jam memiliki rata-rata IPK lebih tinggi ( 3.41  vs  2.94 )."
# MENCARI MAHASISWA DENGAN IPK TERTINGGI DAN NILAI MOTIVASINYA BERSERTA ID_MAHASISWA

# Langkah 1: Temukan nilai IPK tertinggi
max_ipk <- max(df_mahasiswa$ipk, na.rm = TRUE)
print(paste("Nilai IPK tertinggi:", max_ipk)) 
## [1] "Nilai IPK tertinggi: 3.89"
# Langkah 2: Filter mahasiswa dengan IPK tersebut dan tampilkan detail
mahasiswa_tertinggi <- df_mahasiswa %>%
  filter(ipk == max_ipk) %>%  
  select(id_mahasiswa, jenis_kelamin, ipk, motivasi_belajar)

# Tampilkan hasil
print(mahasiswa_tertinggi)
## # A tibble: 1 × 4
##   id_mahasiswa jenis_kelamin   ipk motivasi_belajar
##   <chr>        <chr>         <dbl>            <dbl>
## 1 MHS018       L              3.89               92
#MENGHITUNG JUMLAH LAKI LAKI DAN PEREMPUAN YANG MEMILIKI IPK LEBIH DARI 3,5 DAN MOTIVASI BELAJAR LEBIH DARI 85! DAN JAWAB DENGAN MENYEBUTKAN L=?   P=?

# Langkah 1: Filter mahasiswa yang memenuhi kriteria (IPK > 3.5 DAN motivasi > 85)
data_kriteria <- df_mahasiswa %>%
  filter(ipk > 3.5 & motivasi_belajar > 85) %>%  # Dua kondisi dengan &
  select(id_mahasiswa, jenis_kelamin, ipk, motivasi_belajar)

# Tampilkan daftar mahasiswa yang memenuhi (opsional)
print("Mahasiswa yang memenuhi kriteria:")
## [1] "Mahasiswa yang memenuhi kriteria:"
print(data_kriteria)
## # A tibble: 5 × 4
##   id_mahasiswa jenis_kelamin   ipk motivasi_belajar
##   <chr>        <chr>         <dbl>            <dbl>
## 1 MHS018       L              3.89               92
## 2 MHS034       P              3.56               87
## 3 MHS041       L              3.73               90
## 4 MHS048       L              3.7                92
## 5 MHS051       L              3.65               92
# Langkah 2: Hitung jumlah per jenis kelamin
jumlah_per_gender <- data_kriteria %>%
  mutate(jenis_kelamin_short = ifelse(jenis_kelamin == "Laki-laki", "L", "P")) %>%  
  count(jenis_kelamin_short, name = "jumlah") %>%
  arrange(jenis_kelamin_short)  

# Tampilkan hasil
print(jumlah_per_gender)
## # A tibble: 1 × 2
##   jenis_kelamin_short jumlah
##   <chr>                <int>
## 1 P                        5
# Langkah 3: Ekstrak dan print jawaban langsung
laki <- jumlah_per_gender$jumlah[jumlah_per_gender$jenis_kelamin_short == "L"]
perempuan <- jumlah_per_gender$jumlah[jumlah_per_gender$jenis_kelamin_short == "P"]

# Jika tidak ada data untuk salah satu, set ke 0
if (length(laki) == 0) laki <- 0
if (length(perempuan) == 0) perempuan <- 0

print(paste("L =", laki, "dan P =", perempuan))
## [1] "L = 0 dan P = 5"