Pendahuluan

Tidyverse adalah library di R yang digunakan oleh data scientist dalam melakukan analisis data. Library ini menjadi sangat populer karena kemudahannya dalam menangani data yang kompleks. Tidyverse terdiri dari beberapa paket yang saling terkait dan sering digunakan bersama untuk proses data end-to-end hingga, seperti visualisasi, seperti paket untuk impor data (readr), visualisasi data (ggplot2), manipulasi data (dplyr,tidyr), pemrograman fungsi (purrr), dan pembuatan model (tidymodels), dll.

Contoh penggunaan tidyverse

Berikut adalah contoh bagaimana tidyverse digunakan untuk mengimpor, memanipulasi, dan memvisualisasikan data. Data yang digunakan adalah data students.csv yang bisa diunduh pada link berikut ini.

# load library
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# membaca data csv
data_mahasiswa <- read.csv("https://raw.githubusercontent.com/ekotwidodo/Kanwil-DJPb-Data-Analytics-2024/main/students.csv")

# menampilkan head
head(data_mahasiswa)
##   id   nama usia            jurusan jenjang     asal
## 1  1    Ari   25 Teknik Informatika      S1  Jakarta
## 2  2   Budi   30          Manajemen      S3  Bandung
## 3  3  Citra   35          Akuntansi      S2  Bandung
## 4  4  David   40      Ilmu Komputer      S3  Jakarta
## 5  5    Eko   30         Statistika      S2 Surabaya
## 6  6 Farhan   28          Manajemen      S2    Bogor

Memilih Kolom dengan select()

Misalnya, kita hanya ingin memilih kolom nama dan jurusan.

# Memilih kolom nama dan jurusan
data_mahasiswa_selected <- data_mahasiswa %>%
  select(nama, jurusan)

data_mahasiswa_selected
##       nama            jurusan
## 1      Ari Teknik Informatika
## 2     Budi          Manajemen
## 3    Citra          Akuntansi
## 4    David      Ilmu Komputer
## 5      Eko         Statistika
## 6   Farhan          Manajemen
## 7    Guruh         Statistika
## 8     Hadi          Manajemen
## 9    Irene          Akuntansi
## 10   Johan          Manajemen
## 11   Kalam    Teknik Industri
## 12    Lisa      Ilmu Komputer
## 13    Mona             Bisnis
## 14   Nanda          Manajemen
## 15    Opan          Akuntansi
## 16   Pendi Teknik Informatika
## 17  Qonita      Desain Visual
## 18 Rafinah             Bisnis
## 19 Sabrina         Statistika
## 20   Tariq         Agribisnis

Memfilter Data dengan filter()

Misalnya, kita ingin memfilter mahasiswa yang berusia di atas 30 tahun.

# Memfilter mahasiswa dengan usia lebih dari 30 tahun
data_mahasiswa_filtered <- data_mahasiswa %>%
  filter(usia > 30)

data_mahasiswa_filtered
##   id  nama usia            jurusan jenjang       asal
## 1  3 Citra   35          Akuntansi      S2    Bandung
## 2  4 David   40      Ilmu Komputer      S3    Jakarta
## 3  8  Hadi   34          Manajemen      S3 Jogjakarta
## 4 10 Johan   42          Manajemen      S3  Tangerang
## 5 16 Pendi   38 Teknik Informatika      S3   Surabaya

Menambahkan Kolom Baru dengan mutate()

Misalnya, kita ingin menambahkan kolom baru yang menunjukkan apakah mahasiswa tersebut berusia di atas 30 tahun atau tidak.

# Menambahkan kolom baru "di_atas_30" yang menunjukkan apakah usia lebih dari 30
data_mahasiswa_mutated <- data_mahasiswa %>%
  mutate(usia_di_atas_30 = if_else(usia > 30, "Ya", "Tidak"))

data_mahasiswa_mutated
##    id    nama usia            jurusan jenjang       asal usia_di_atas_30
## 1   1     Ari   25 Teknik Informatika      S1    Jakarta           Tidak
## 2   2    Budi   30          Manajemen      S3    Bandung           Tidak
## 3   3   Citra   35          Akuntansi      S2    Bandung              Ya
## 4   4   David   40      Ilmu Komputer      S3    Jakarta              Ya
## 5   5     Eko   30         Statistika      S2   Surabaya           Tidak
## 6   6  Farhan   28          Manajemen      S2      Bogor           Tidak
## 7   7   Guruh   24         Statistika      S1   Semarang           Tidak
## 8   8    Hadi   34          Manajemen      S3 Jogjakarta              Ya
## 9   9   Irene   27          Akuntansi      S2     Malang           Tidak
## 10 10   Johan   42          Manajemen      S3  Tangerang              Ya
## 11 11   Kalam   25    Teknik Industri      S2      Medan           Tidak
## 12 12    Lisa   24      Ilmu Komputer      S1  Palembang           Tidak
## 13 13    Mona   28             Bisnis      S3      Jambi           Tidak
## 14 14   Nanda   27          Manajemen      S2   Semarang           Tidak
## 15 15    Opan   27          Akuntansi      S2 Balikpapan           Tidak
## 16 16   Pendi   38 Teknik Informatika      S3   Surabaya              Ya
## 17 17  Qonita   23      Desain Visual      S1      Batam           Tidak
## 18 18 Rafinah   26             Bisnis      S2  Palembang           Tidak
## 19 19 Sabrina   30         Statistika      S3    Bandung           Tidak
## 20 20   Tariq   26         Agribisnis      S2    Jakarta           Tidak

Mengelompokkan Data dan Menghitung Statistik Agregat dengan group_by() dan summarize()

Misalnya, kita ingin menghitung rata-rata usia mahasiswa per jurusan.

# Mengelompokkan berdasarkan jurusan dan menghitung rata-rata usia
data_mahasiswa_summarized <- data_mahasiswa %>%
  group_by(jurusan) %>%
  summarize(rata_usia = mean(usia, na.rm = TRUE))

data_mahasiswa_summarized
## # A tibble: 9 × 2
##   jurusan            rata_usia
##   <chr>                  <dbl>
## 1 Agribisnis              26  
## 2 Akuntansi               29.7
## 3 Bisnis                  27  
## 4 Desain Visual           23  
## 5 Ilmu Komputer           32  
## 6 Manajemen               32.2
## 7 Statistika              28  
## 8 Teknik Industri         25  
## 9 Teknik Informatika      31.5

Mengurutkan Data dengan arrange()

Misalnya, kita ingin mengurutkan data berdasarkan usia secara descending.

# Mengurutkan data berdasarkan usia secara descending
data_mahasiswa_sorted <- data_mahasiswa %>%
  arrange(desc(usia))

data_mahasiswa_sorted
##    id    nama usia            jurusan jenjang       asal
## 1  10   Johan   42          Manajemen      S3  Tangerang
## 2   4   David   40      Ilmu Komputer      S3    Jakarta
## 3  16   Pendi   38 Teknik Informatika      S3   Surabaya
## 4   3   Citra   35          Akuntansi      S2    Bandung
## 5   8    Hadi   34          Manajemen      S3 Jogjakarta
## 6   2    Budi   30          Manajemen      S3    Bandung
## 7   5     Eko   30         Statistika      S2   Surabaya
## 8  19 Sabrina   30         Statistika      S3    Bandung
## 9   6  Farhan   28          Manajemen      S2      Bogor
## 10 13    Mona   28             Bisnis      S3      Jambi
## 11  9   Irene   27          Akuntansi      S2     Malang
## 12 14   Nanda   27          Manajemen      S2   Semarang
## 13 15    Opan   27          Akuntansi      S2 Balikpapan
## 14 18 Rafinah   26             Bisnis      S2  Palembang
## 15 20   Tariq   26         Agribisnis      S2    Jakarta
## 16  1     Ari   25 Teknik Informatika      S1    Jakarta
## 17 11   Kalam   25    Teknik Industri      S2      Medan
## 18  7   Guruh   24         Statistika      S1   Semarang
## 19 12    Lisa   24      Ilmu Komputer      S1  Palembang
## 20 17  Qonita   23      Desain Visual      S1      Batam

Menggabungkan Data dengan left_join()

Jika kita punya dua dataset yang berbeda dan ingin menggabungkannya berdasarkan kolom tertentu (misalnya id), Anda bisa menggunakan left_join().

Misalkan kita memiliki dataset lain yang berisi informasi tambahan tentang mahasiswa, seperti ipk.

# Contoh data tambahan
data_ipk_mahasiswa <- data.frame(
  id = 1:20,
  ipk = round(runif(20, min = 3.00, max = 4.00), 2)
)

# Menggabungkan data_mahasiswa dengan data_nilai berdasarkan id
data_mahasiswa_joined <- data_mahasiswa %>%
  left_join(data_ipk_mahasiswa, by = "id")

data_mahasiswa_joined
##    id    nama usia            jurusan jenjang       asal  ipk
## 1   1     Ari   25 Teknik Informatika      S1    Jakarta 3.80
## 2   2    Budi   30          Manajemen      S3    Bandung 3.38
## 3   3   Citra   35          Akuntansi      S2    Bandung 3.88
## 4   4   David   40      Ilmu Komputer      S3    Jakarta 3.36
## 5   5     Eko   30         Statistika      S2   Surabaya 3.22
## 6   6  Farhan   28          Manajemen      S2      Bogor 3.76
## 7   7   Guruh   24         Statistika      S1   Semarang 3.64
## 8   8    Hadi   34          Manajemen      S3 Jogjakarta 3.41
## 9   9   Irene   27          Akuntansi      S2     Malang 3.72
## 10 10   Johan   42          Manajemen      S3  Tangerang 3.34
## 11 11   Kalam   25    Teknik Industri      S2      Medan 3.47
## 12 12    Lisa   24      Ilmu Komputer      S1  Palembang 3.99
## 13 13    Mona   28             Bisnis      S3      Jambi 3.80
## 14 14   Nanda   27          Manajemen      S2   Semarang 3.86
## 15 15    Opan   27          Akuntansi      S2 Balikpapan 3.61
## 16 16   Pendi   38 Teknik Informatika      S3   Surabaya 3.80
## 17 17  Qonita   23      Desain Visual      S1      Batam 3.40
## 18 18 Rafinah   26             Bisnis      S2  Palembang 3.46
## 19 19 Sabrina   30         Statistika      S3    Bandung 3.23
## 20 20   Tariq   26         Agribisnis      S2    Jakarta 3.90

Menghitung Proporsi dengan count() dan prop.table()

Kita bisa menghitung frekuensi dan proporsi kategori dalam dataset. Misalnya, menghitung berapa banyak mahasiswa dalam setiap jurusan.

# Menghitung jumlah mahasiswa per jurusan
data_mahasiswa_count_prop <- data_mahasiswa %>%
  count(jurusan) %>%
  mutate(proporsi = n / sum(n))

data_mahasiswa_count_prop
##              jurusan n proporsi
## 1         Agribisnis 1     0.05
## 2          Akuntansi 3     0.15
## 3             Bisnis 2     0.10
## 4      Desain Visual 1     0.05
## 5      Ilmu Komputer 2     0.10
## 6          Manajemen 5     0.25
## 7         Statistika 3     0.15
## 8    Teknik Industri 1     0.05
## 9 Teknik Informatika 2     0.10

Merangkum Data dengan summarize_all() dan summarize_at()

Kita bisa menerapkan fungsi ringkasan ke semua kolom atau subset kolom dengan summarize_all() dan summarize_at().

Contoh: Menghitung rata-rata, nilai minimum, dan maksimum untuk kolom usia dan ipk

# Menghitung rata-rata, nilai minimum, dan maksimum untuk kolom numerik
data_mahasiswa_summary <- data_mahasiswa_joined %>%
  summarize_at(
    vars(usia, ipk),
    list(mean = ~mean(., na.rm = TRUE), 
    min = ~min(., na.rm = TRUE), 
    max = ~max(., na.rm = TRUE)))

data_mahasiswa_summary
##   usia_mean ipk_mean usia_min ipk_min usia_max ipk_max
## 1     29.45   3.6015       23    3.22       42    3.99

Mengelompokkan dan Menghitung Ukuran Grup dengan group_by() dan tally()

Misalnya, kita ingin mengetahui jumlah mahasiswa di setiap jurusan.

# Mengelompokkan berdasarkan asal dan menghitung jumlah mahasiswa di setiap asal
data_mahasiswa_grouped <- data_mahasiswa %>%
  group_by(asal) %>%
  tally()

data_mahasiswa_grouped
## # A tibble: 13 × 2
##    asal           n
##    <chr>      <int>
##  1 Balikpapan     1
##  2 Bandung        3
##  3 Batam          1
##  4 Bogor          1
##  5 Jakarta        3
##  6 Jambi          1
##  7 Jogjakarta     1
##  8 Malang         1
##  9 Medan          1
## 10 Palembang      2
## 11 Semarang       2
## 12 Surabaya       2
## 13 Tangerang      1

Menggunakan case_when() untuk Transformasi Kondisional

Fungsi ini digunakan untuk membuat kolom baru berdasarkan beberapa kondisi.

Misalkan kita ingin mengelompokkan mahasiswa berdasarkan usia ke dalam kategori “Muda”, “Dewasa”, dan “Senior”.

# Mengelompokkan berdasarkan usia
data_mahasiswa_categorized <- data_mahasiswa %>%
  mutate(kelompok_usia = case_when(
    usia < 30 ~ "Muda",
    usia >= 30 & usia < 40 ~ "Dewasa",
    usia >= 40 ~ "Senior"
  ))

data_mahasiswa_categorized
##    id    nama usia            jurusan jenjang       asal kelompok_usia
## 1   1     Ari   25 Teknik Informatika      S1    Jakarta          Muda
## 2   2    Budi   30          Manajemen      S3    Bandung        Dewasa
## 3   3   Citra   35          Akuntansi      S2    Bandung        Dewasa
## 4   4   David   40      Ilmu Komputer      S3    Jakarta        Senior
## 5   5     Eko   30         Statistika      S2   Surabaya        Dewasa
## 6   6  Farhan   28          Manajemen      S2      Bogor          Muda
## 7   7   Guruh   24         Statistika      S1   Semarang          Muda
## 8   8    Hadi   34          Manajemen      S3 Jogjakarta        Dewasa
## 9   9   Irene   27          Akuntansi      S2     Malang          Muda
## 10 10   Johan   42          Manajemen      S3  Tangerang        Senior
## 11 11   Kalam   25    Teknik Industri      S2      Medan          Muda
## 12 12    Lisa   24      Ilmu Komputer      S1  Palembang          Muda
## 13 13    Mona   28             Bisnis      S3      Jambi          Muda
## 14 14   Nanda   27          Manajemen      S2   Semarang          Muda
## 15 15    Opan   27          Akuntansi      S2 Balikpapan          Muda
## 16 16   Pendi   38 Teknik Informatika      S3   Surabaya        Dewasa
## 17 17  Qonita   23      Desain Visual      S1      Batam          Muda
## 18 18 Rafinah   26             Bisnis      S2  Palembang          Muda
## 19 19 Sabrina   30         Statistika      S3    Bandung        Dewasa
## 20 20   Tariq   26         Agribisnis      S2    Jakarta          Muda

Menghilangkan Duplikasi dengan distinct()

Kita bisa menggunakan distinct() untuk menghilangkan baris duplikat dalam dataset.

# Menghilangkan baris duplikat berdasarkan kolom jurusan dan asal
data_mahasiswa_distinct <- data_mahasiswa %>%
  distinct(jurusan, asal)

data_mahasiswa_distinct
##               jurusan       asal
## 1  Teknik Informatika    Jakarta
## 2           Manajemen    Bandung
## 3           Akuntansi    Bandung
## 4       Ilmu Komputer    Jakarta
## 5          Statistika   Surabaya
## 6           Manajemen      Bogor
## 7          Statistika   Semarang
## 8           Manajemen Jogjakarta
## 9           Akuntansi     Malang
## 10          Manajemen  Tangerang
## 11    Teknik Industri      Medan
## 12      Ilmu Komputer  Palembang
## 13             Bisnis      Jambi
## 14          Manajemen   Semarang
## 15          Akuntansi Balikpapan
## 16 Teknik Informatika   Surabaya
## 17      Desain Visual      Batam
## 18             Bisnis  Palembang
## 19         Statistika    Bandung
## 20         Agribisnis    Jakarta

Membuat Pivot Table dengan spread() dan pivot_wider()

Mengubah data dari format long ke wide (seperti pivot table) bisa dilakukan dengan spread() atau pivot_wider().

Contoh: Mengubah data ke format wide berdasarkan jurusan dan ipk.

# Pivot data ke format wide
data_mahasiswa_wide <- data_mahasiswa_joined %>%
  pivot_wider(names_from = jurusan, values_from = ipk)

data_mahasiswa_wide
## # A tibble: 20 × 14
##       id nama     usia jenjang asal     `Teknik Informatika` Manajemen Akuntansi
##    <int> <chr>   <int> <chr>   <chr>                   <dbl>     <dbl>     <dbl>
##  1     1 Ari        25 S1      Jakarta                   3.8     NA        NA   
##  2     2 Budi       30 S3      Bandung                  NA        3.38     NA   
##  3     3 Citra      35 S2      Bandung                  NA       NA         3.88
##  4     4 David      40 S3      Jakarta                  NA       NA        NA   
##  5     5 Eko        30 S2      Surabaya                 NA       NA        NA   
##  6     6 Farhan     28 S2      Bogor                    NA        3.76     NA   
##  7     7 Guruh      24 S1      Semarang                 NA       NA        NA   
##  8     8 Hadi       34 S3      Jogjaka…                 NA        3.41     NA   
##  9     9 Irene      27 S2      Malang                   NA       NA         3.72
## 10    10 Johan      42 S3      Tangera…                 NA        3.34     NA   
## 11    11 Kalam      25 S2      Medan                    NA       NA        NA   
## 12    12 Lisa       24 S1      Palemba…                 NA       NA        NA   
## 13    13 Mona       28 S3      Jambi                    NA       NA        NA   
## 14    14 Nanda      27 S2      Semarang                 NA        3.86     NA   
## 15    15 Opan       27 S2      Balikpa…                 NA       NA         3.61
## 16    16 Pendi      38 S3      Surabaya                  3.8     NA        NA   
## 17    17 Qonita     23 S1      Batam                    NA       NA        NA   
## 18    18 Rafinah    26 S2      Palemba…                 NA       NA        NA   
## 19    19 Sabrina    30 S3      Bandung                  NA       NA        NA   
## 20    20 Tariq      26 S2      Jakarta                  NA       NA        NA   
## # ℹ 6 more variables: `Ilmu Komputer` <dbl>, Statistika <dbl>,
## #   `Teknik Industri` <dbl>, Bisnis <dbl>, `Desain Visual` <dbl>,
## #   Agribisnis <dbl>

Merubah Data Format Wide ke Long dengan gather()

Misalnya, kita ingin mengubah data menjadi format long untuk analisis lebih lanjut.

# Mengubah data ke format long (meskipun sederhana di sini, ini bisa berguna dalam dataset yang lebih besar)
data_mahasiswa_long <- data_mahasiswa %>%
  gather(key = "variable", value = "value", usia)

data_mahasiswa_long
##    id    nama            jurusan jenjang       asal variable value
## 1   1     Ari Teknik Informatika      S1    Jakarta     usia    25
## 2   2    Budi          Manajemen      S3    Bandung     usia    30
## 3   3   Citra          Akuntansi      S2    Bandung     usia    35
## 4   4   David      Ilmu Komputer      S3    Jakarta     usia    40
## 5   5     Eko         Statistika      S2   Surabaya     usia    30
## 6   6  Farhan          Manajemen      S2      Bogor     usia    28
## 7   7   Guruh         Statistika      S1   Semarang     usia    24
## 8   8    Hadi          Manajemen      S3 Jogjakarta     usia    34
## 9   9   Irene          Akuntansi      S2     Malang     usia    27
## 10 10   Johan          Manajemen      S3  Tangerang     usia    42
## 11 11   Kalam    Teknik Industri      S2      Medan     usia    25
## 12 12    Lisa      Ilmu Komputer      S1  Palembang     usia    24
## 13 13    Mona             Bisnis      S3      Jambi     usia    28
## 14 14   Nanda          Manajemen      S2   Semarang     usia    27
## 15 15    Opan          Akuntansi      S2 Balikpapan     usia    27
## 16 16   Pendi Teknik Informatika      S3   Surabaya     usia    38
## 17 17  Qonita      Desain Visual      S1      Batam     usia    23
## 18 18 Rafinah             Bisnis      S2  Palembang     usia    26
## 19 19 Sabrina         Statistika      S3    Bandung     usia    30
## 20 20   Tariq         Agribisnis      S2    Jakarta     usia    26

Membuat tabulasi distribusi frekuensi

Tabel distribusi frekuensi adalah cara untuk merangkum data kategoris atau numerik dengan menunjukkan berapa kali setiap nilai atau kelompok nilai muncul dalam dataset.

Misalkan kita ingin melihat distribusi frekuensi dari kolom asal untuk mengetahui berapa banyak mahasiswa menurut asal.

# Menghitung distribusi frekuensi untuk kolom 'asal'
tabel_frekuensi_asal <- data_mahasiswa %>%
  count(asal) %>%
  rename(frekuensi = n)
  
tabel_frekuensi_asal
##          asal frekuensi
## 1  Balikpapan         1
## 2     Bandung         3
## 3       Batam         1
## 4       Bogor         1
## 5     Jakarta         3
## 6       Jambi         1
## 7  Jogjakarta         1
## 8      Malang         1
## 9       Medan         1
## 10  Palembang         2
## 11   Semarang         2
## 12   Surabaya         2
## 13  Tangerang         1

Untuk data numerik, seperti kolom usia, kita mungkin ingin membuat bin (kelompok interval) dan menghitung frekuensi masing-masing interval.

# Membuat bin untuk kolom 'usia' dan menghitung frekuensi
tabel_frekuensi_usia <- data_mahasiswa %>%
  mutate(kelompok_usia = cut(usia, breaks = seq(20, 50, by = 5), right = FALSE)) %>%
  count(kelompok_usia) %>%
  rename(frekuensi = n)

# Menampilkan tabel distribusi frekuensi untuk usia
print(tabel_frekuensi_usia)
##   kelompok_usia frekuensi
## 1       [20,25)         3
## 2       [25,30)         9
## 3       [30,35)         4
## 4       [35,40)         2
## 5       [40,45)         2

Dari data yang ditampilkan di atas sudah benar, tapi kita ingin membuat kelompok_usia tampilannya bukan [20, 25) tapi 20-25. Kita bisa melakukan modifikasi output dari cut() dengan mengubah label yang dihasilkan.

# Membuat interval usia dengan label khusus
tabel_frekuensi_usia <- data_mahasiswa %>%
  mutate(kelompok_usia = cut(usia, 
                              breaks = c(20, 25, 30, 35, 40, 45, 50), 
                              labels = c("20-25", "25-30", "30-35", "35-40", "40-45", "45-50"),
                              right = FALSE)) %>%
  count(kelompok_usia) %>%
  mutate(proporsi = n / sum(n)) %>%
  rename(frekuensi = n)

# Menampilkan tabel distribusi frekuensi dengan proporsi untuk kelompok usia
print(tabel_frekuensi_usia)
##   kelompok_usia frekuensi proporsi
## 1         20-25         3     0.15
## 2         25-30         9     0.45
## 3         30-35         4     0.20
## 4         35-40         2     0.10
## 5         40-45         2     0.10

Menggunakan Cross-Tabulation

Cross-tabulation adalah teknik yang sangat berguna untuk menganalisis hubungan antara dua atau lebih variabel kategoris. Kita bisa menggunakan table() atau ftable() untuk melakukan cross-tabulation.

Contoh kita ingin melihat hubungan antara jurusan dan jenjang dari data mahasiswa.

# Membuat cross tabulation antara jurusan dan jenjang
cross_tab <- table(data_mahasiswa$jurusan, data_mahasiswa$jenjang)

# Menampilkan hasil
print(cross_tab)
##                     
##                      S1 S2 S3
##   Agribisnis          0  1  0
##   Akuntansi           0  3  0
##   Bisnis              0  1  1
##   Desain Visual       1  0  0
##   Ilmu Komputer       1  0  1
##   Manajemen           0  2  3
##   Statistika          1  1  1
##   Teknik Industri     0  1  0
##   Teknik Informatika  1  0  1

Kita juga bisa menggunakan kombinasi dari count(), spread(), dan pivot_wider() dari yang sudah kita pelajari sebelumnya.

# Menggunakan dplyr dan tidyr untuk cross tabulation
cross_tab_tidy <- data_mahasiswa %>%
  count(jurusan, jenjang) %>%
  pivot_wider(names_from = jenjang, values_from = n, values_fill = 0)

# Menampilkan hasil
print(cross_tab_tidy)
## # A tibble: 9 × 4
##   jurusan               S2    S3    S1
##   <chr>              <int> <int> <int>
## 1 Agribisnis             1     0     0
## 2 Akuntansi              3     0     0
## 3 Bisnis                 1     1     0
## 4 Desain Visual          0     0     1
## 5 Ilmu Komputer          0     1     1
## 6 Manajemen              2     3     0
## 7 Statistika             1     1     1
## 8 Teknik Industri        1     0     0
## 9 Teknik Informatika     0     1     1

Kombinasi dengan Grafik

Meningat di dalam library tidyverse juga ada library ggplot2, tentunya kita bisa mengkombinasikannya dengan grafik dari hasil eksplorasi data kita.

Misalkan dari data cross-tabulation jurusan dan jenjang, kita bisa kombinasikan dengan membuat stacked bar plot dari ggplot2.

# Menghitung proporsi mahasiswa per jurusan dan jenjang
cross_tab_prop <- as.data.frame(cross_tab) %>%
  rename(jurusan = Var1, jenjang = Var2, n = Freq) %>%
  group_by(jurusan) %>%
  mutate(proporsi = n / sum(n))

# Membuat bar plot berdasarkan proporsi
ggplot(cross_tab_prop, aes(x = jurusan, y = proporsi, fill = jenjang)) +
  geom_bar(stat = "identity", position = "fill") +
  labs(title = "Proporsi Mahasiswa per Jurusan dan Jenjang",
       x = "Jurusan",
       y = "Proporsi") +
  theme_minimal()

# Menghitung jumlah mahasiswa per jenjang dan proporsinya
data_jenjang <- data_mahasiswa %>%
  count(jenjang) %>%
  mutate(proporsi = n / sum(n))

# Membuat pie chart proporsi berdasarkan jenjang
ggplot(data_jenjang, aes(x = "", y = proporsi, fill = jenjang)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  labs(title = "Proporsi Mahasiswa Berdasarkan Jenjang",
       x = NULL,
       y = NULL) +
  theme_void() +  # Menghapus grid dan sumbu
  theme(legend.position = "right")  # Menempatkan legenda di sebelah kanan