Faktor
Seringkali data itu hanya memuat sejumlah kategori yang terbatas. Misalnya, posisi negara-negara di dunia ini dapat dikategorikan ke dalam tujuh benua: Asia, Afrika, Amerika Utara, Amerika Selatan, Antarktika, Eropa, dan Australia. Di R, data kategori seperti ini merupakan faktor. Faktor merupakan struktur data yang penting untuk menganalisis data. Oleh karena itu, di subbab ini Anda akan dipandu untuk belajar dan berlatih tentang faktor.
Selayang Pandang Tentang Faktor
Faktor merupakan sebuah jenis data statistik yang digunakan untuk menyimpan variabel-variabel kategori. Selain variabel kategori, kita mengenal juga variabel kontinu. Perbedaan antara keduanya adalah bahwa variabel kategori hanya dapat termuat ke dalam kategori-kategori yang terbatas. Sebaliknya, variabel kontinu dapat berkorespondensi dengan nilai-nilai yang banyaknya tak hingga.
Karena adanya perbedaan dua variabel tersebut, penting bagi R untuk mengetahui jenis variabel yang diolahnya. Demikian halnya kita juga perlu memperlakukan dua jenis variabel tersebut dengan cara yang berbeda.
Salah satu contoh jenis variabel kategori yang sering digunakan adalah jenis kelamin. Di banyak kasus, kita dapat mengkategorikan jenis kelamin ke dalam dua kategori: “Laki-laki” dan “Perempuan”.
Untuk mengilustrasikan bagaimana membuat faktor di R, pertama kita buat sebuah vektor yang elemen-elemennya dapat diklasifikasikan ke dalam sejumlah kategori yang terbatas. Misalnya, vektor_jk
berikut ini berisi jenis kelamin dari lima orang yang berbeda.
vektor_jk <- c("Perempuan", "Perempuan",
"Laki-laki", "Perempuan",
"Laki-laki")
Jelas bahwa vektor_jk
memuat dua level faktor, yaitu "Laki-laki"
dan "Perempuan"
. Untuk menjadikan tersebut sebagai sebuah faktor, kita dapat menggunakan fungsi factor()
.
vektor_jk_faktor <- factor(vektor_jk)
Latihan 1.31
- Ubahlah vektor karakter
vektor_jk
menjadi sebuah faktor dengan fungsifactor()
dan namai hasilnya sebagaivektor_jk_faktor
. - Tampilkan
vektor_jk_faktor
dan perhatikan bahwa R mencetak level-level faktor tersebut di bawah nilai-nilai yang sebenarnya.
# no pec
# Vektor jenis kelamin
vektor_jk <- c("Perempuan", "Perempuan", "Laki-laki", "Perempuan", "Laki-laki")
# Konversi vektor_jk menjadi sebuah faktor
vektor_jk_faktor <-
# Tampilkan vektor_jk_faktor
# Vektor jenis kelamin
vektor_jk <- c("Perempuan", "Perempuan", "Laki-laki", "Perempuan", "Laki-laki")
# Konversi vektor_jk menjadi sebuah faktor
vektor_jk_faktor <- factor(vektor_jk)
# Tampilkan vektor_jk_faktor
vektor_jk_faktor
ex() %>% check_object("vektor_jk_faktor") %>% check_equal(incorrect_msg = "Apakah Anda sudah menjadikan `vektor_jk` sebagai sebuah faktor yang bernama `vektor_jk_faktor`?")
ex() %>% check_output_expr("vektor_jk_faktor", missing_msg = "Jangan lupa untuk menampilkan `vektor_jk_faktor`!")
success_msg("Mantap! Silakan lanjut ke bahasan berikutnya.")
factor()
pada vektor_jk
. Lihat lagi pembahasan sebelumnya. Jawabannya sudah dibahas di situ.Terdapat dua jenis variabel kategori: variabel nominal dan variabel ordinal.
Variabel nominal adalah variabel kategori yang tidak memiliki urutan. Dengan kata lain, kita tidak dapat membandingkan dan mengatakan bahwa satu kategori lebih tinggi dari kategori lainnya. Misalnya kita memiliki variabel kategori vektor_warna
yang kategori-kategorinya "Merah"
, "Kuning"
, "Hijau"
, dan "Biru"
. Dengan kategori seperti itu, kita tidak mungkin mengatakan bahwa satu warna lebih tinggi dari warna lainnya.
Sebaliknya, variabel ordinal memiliki urutan. Misalnya adalah variabel ordinal vektor_kesukaran
yang memiliki kategori "Mudah"
, "Menengah"
, dan "Susah"
. Dari contoh ini, jelas bahwa "Menengah"
lebih tinggi daripada "Mudah"
, dan "Susah"
merupakan kategori yang paling tinggi.
Latihan 1.32
Klik Submit untuk mengirimkan jawaban yang telah tersedia dan lihat bagaimana R menampilkan variabel-variabel nominal dan ordinal. Jika Anda belum memahami apa yang ditampilkan, jangan bermuram durja. Kita diskusikan di bagian selanjutnya.
# no pec
# Warna
vektor_warna <- c("Merah", "Kuning", "Hijau", "Biru")
vektor_warna_faktor <- factor(vektor_warna)
vektor_warna_faktor
# Kesukaran
vektor_kesukaran <- c("Mudah", "Menengah", "Mudah","Menengah", "Susah")
vektor_kesukaran_faktor <- factor(vektor_kesukaran, order = TRUE, levels = c("Mudah", "Menengah", "Susah"))
vektor_kesukaran_faktor
# Warna
vektor_warna <- c("Merah", "Kuning", "Hijau", "Biru")
vektor_warna_faktor <- factor(vektor_warna)
vektor_warna_faktor
# Kesukaran
vektor_kesukaran <- c("Mudah", "Menengah", "Mudah","Menengah", "Susah")
vektor_kesukaran_faktor <- factor(vektor_kesukaran, order = TRUE, levels = c("Mudah", "Menengah", "Susah"))
vektor_kesukaran_faktor
msg <- "Jangan mengubah kode apapun dalam skrip. Cukup submit jawabannya dan cermati hasilnya!"
ex() %>% check_object("vektor_warna", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("vektor_kesukaran", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("vektor_warna_faktor", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_output_expr("vektor_warna_faktor", missing_msg = msg)
ex() %>% check_object("vektor_kesukaran_faktor", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_output_expr("vektor_kesukaran_faktor", missing_msg = msg)
success_msg("Sudahkah Anda mengamati level faktornya? Luar biasa! Lanjut ke bahasan berikutnya untuk mempelajari lebih jauh tentang level faktor.")
Level-Level Faktor
Misalkan Anda baru saja selesai melakukan survei dan sekarang menghadap data survei tersebut. Anda memperhatikan bahwa variabel jenis kelamin dalam data survei terebut memuat dua kategori, yaitu "L"
dan "P"
. Agar data tersebut terbaca dengan mudah oleh orang lain, Anda ingin mengubahnya menjadi "Laki-laki"
dan "Perempuan"
. Bagaimana cara melakukannya?
Keinginan Anda tersebut dapat dilakukan dengan memanfaatkan fungsi levels()
. Sebagai contoh, jenis kelamin dari responden survei Anda adalah seperti ini.
vektor_survei <- c("P", "P", "L", "P", "L")
Pertama, kita perlu mengkonversi vektor tersebut menjadi sebuah faktor, vektor_survei_faktor
. Setelah itu, kita gunakan c("Laki-laki", "Perempuan")
untuk dipetakan ke levels(vektor_survei_vektor)
.
Penting diperhatikan bahwa pemetaan tersebut harus terurut secara akurat. Jika Anda mentikkan levels(vektor_survei_faktor)
, Anda akan mendapatkan luaran seperti berikut.
[1] "L" "P"
Jika Anda tidak mengatur level-level faktor tersebut, R secara otomatis akan memetakannya menurut alfabet. Agar secara akurat fungsi levels()
tersebut memetakan "Laki-laki"
ke "L"
dan "Perempuan"
ke "P"
, kita perlu menggunakan c("Laki-laki", "Perempuan")
.
Latihan 1.33
- Cermati kode yang digunakan untuk membuat
vektor_survei
danvektor_survei_faktor
. Vektor faktor tersebut dipakai dalam perintah berikutnya. - Ubahlah level-level faktor
vektor_survei_faktor
menjadic("Laki-laki", "Perempuan")
dan tampilkan hasilnya.
# no pec
# Kode untuk membuat vektor_survei_faktor
vektor_survei <- c("P", "P", "L", "P", "L")
vektor_survei_faktor <- factor(vektor_survei)
# Aturlah level-level vektor_survei_faktor
levels(vektor_survei_faktor) <-
vektor_survei_faktor
# Kode untuk membuat vektor_survei_faktor
vektor_survei <- c("P", "P", "L", "P", "L")
vektor_survei_faktor <- factor(vektor_survei)
# Aturlah level-level vektor_survei_faktor
levels(vektor_survei_faktor) <- c("Laki-laki", "Perempuan")
vektor_survei_faktor
msg = "Jangan mengubah pendefinisian `vektor_survei`!"
ex() %>% check_object("vektor_survei", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
msg = "Jangan mengubah atau menghapus kode untuk membuat vektor faktornya."
ex() %>% check_function("factor", not_called_msg = msg) %>% check_arg('x') %>% check_equal(incorrect_msg = msg)
# MC-note: ideally would want to test assign operator `<-`, and have it highlight whole line.
# MC-note: or negate this test_student_typed, to highlight where they type this incorrect phrase
# test_student_typed('c("Male", "Female")')
ex() %>% check_object("vektor_survei_faktor") %>% check_equal(eq_condition = "equal", incorrect_msg = paste("Apakah Anda telah memetakan level-level faktor yang benar kepada `vektor_survei_faktor`? Gunakan `levels(vektor_survei_faktor) <- c(\"Laki-laki\", \"Perempuan\")`. Ingat bahwa R sensitif terhadap kapitalisasi!"))
success_msg("Jempol! Lanjut ke materi berikutnya.")
Meringkas Sebuah Faktor
Anda telah mengganti level-level faktor dari variabel jenis kelamin dalam data survei Anda. Sekarang, Anda ingin meringkas variabel jenis kelamin tersebut.
Di R, kita dapat menggunakan fungsi summary()
untuk melihat ringkasan sebuah variabel.
summary(var_ku)
Dengan fungsi itu, kita dapat mengetahui banyaknya responden yang menjawab "Laki-laki"
, dan berapa banyak yang menjawab "Perempuan"
.
Latihan 1.34
Gunakan summary()
pada vektor_survei
dan vektor_survei_faktor
, kemudian interpretasikan hasilnya. Menurut Anda, apakah kedua hasil tersebut sama bermanfaatnya?
# no pec
# Kode untuk membuat vektor_survei_faktor
vektor_survei <- c("P", "P", "L", "P", "L")
vektor_survei_faktor <- factor(vektor_survei)
levels(vektor_survei_faktor) <- c("Laki-laki", "Perempuan")
vektor_survei_faktor
# Membuat ringkasan untuk vektor_survei
# Membuat ringkasan untuk vektor_survei_faktor
# Kode untuk membuat vektor_survei_faktor
vektor_survei <- c("P", "P", "L", "P", "L")
vektor_survei_faktor <- factor(vektor_survei)
levels(vektor_survei_faktor) <- c("Laki-laki", "Perempuan")
vektor_survei_faktor
# Membuat ringkasan untuk vektor_survei
summary(vektor_survei)
# Membuat ringkasan untuk vektor_survei_faktor
summary(vektor_survei_faktor)
msg = "Jangan mengubah apapun pada baris yang mendefinisikan `vektor_survei` dan `vektor_survei_faktor`."
ex() %>% check_object("vektor_survei", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("vektor_survei_faktor", undefined_msg = msg) %>% check_equal(eq_condition = "equal",incorrect_msg = msg)
msg <- "Apakah secara akurat Anda menggunakan `summary()` untuk meringkas `vektor_survei` dan `vektor_survei_faktor`?"
ex() %>% check_output_expr("summary(vektor_survei)", missing_msg = sprintf(msg, "vektor_survei"))
ex() %>% check_output_expr("summary(vektor_survei_faktor)", missing_msg = sprintf(msg, "vektor_survei_faktor"))
success_msg("Bagus! Cermati luarannya. Karena kita telah mengatur `\"Laki-laki\"` dan `\"Perempuan\"` sebagai level-level faktor dari `vektor_survei_faktor`, R dapat menunjukkan banyaknya tiap-tiap kategori tersebut.")
summary()
untuk vektor_survei
dan vektor_survei_faktor
.Pada bagian sebelumnya telah disinggung bahwa kita tidak mungkin membandingkan level-level variabel nominal. Tapi mungkin Anda tetap penasaran bagaimana jika kita membandingkan level-level tersebut. Silakan jawab rasa penasaran Anda di Latihan 1.35.
Latihan 1.35
Bacalah kode di dalam editor dan klik Submit untuk mengirimkan jawabannya. Kode tersebut digunakan untuk menguji apakah laki
lebih besar dari (>
) perempuan
.
# no pec
# Membuat vektor_survei_faktor dengan level-level yang mudah dibaca
vektor_survei <- c("P", "P", "L", "P", "L")
vektor_survei_faktor <- factor(vektor_survei)
levels(vektor_survei_faktor) <- c("Laki-laki", "Perempuan")
# Laki-laki
laki <- vektor_survei_faktor[1]
# Perempuan
perempuan <- vektor_survei_faktor[2]
# Apakah laki-laki 'lebih besar' daripada perempuan
laki > perempuan
# Membuat vektor_survei_faktor dengan level-level yang mudah dibaca
vektor_survei <- c("P", "P", "L", "P", "L")
vektor_survei_faktor <- factor(vektor_survei)
levels(vektor_survei_faktor) <- c("Laki-laki", "Perempuan")
# Laki-laki
laki <- vektor_survei_faktor[1]
# Perempuan
perempuan <- vektor_survei_faktor[2]
# Apakah laki-laki 'lebih besar' daripada perempuan
laki > perempuan
msg = "Jangan mengubah apapun terhadap kodenya. Cuku kirimkan jawabannya dan lihat hasilnya."
ex() %>% check_object("vektor_survei", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("vektor_survei_faktor", undefined_msg = msg) %>% check_equal(eq_condition = "equal", incorrect_msg = msg)
ex() %>% check_object("laki", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("perempuan", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_output_expr("laki > perempuan", missing_msg = msg)
success_msg("Menarik! R akan mendapatkan `NA` ketika kita membandingkan level-level variabel nominal, karena hal ini tidak mungkin dilakukan. Selanjutnya Anda akan belajar faktor-faktor yang terurut, sehingga perbandingan semacam itu dimungkinkan.")
Faktor-Faktor Terurut
Latihan 1.35 telah menunjukkan bahwa tidak mungkin kita membandingkan level-level faktor yang tak terurut (nominal). Akan tetapi ketika kita memiliki level-level faktor yang terurut (ordinal), tentu kita dapat membandingkannya. Kita perlu memastikan bahwa karakteristik keterurutan tersebut diterima oleh R.
Misalkan Anda bekerja kelompok secara daring bersama dengan lima teman Anda. Sebagai ketua kelompok, Anda mencatat seberapa cepat mereka menanggapi diskusi yang dilakukan dalam forum. Anda kemudian mengkategorikan kecepatannya ke dalam tiga kategori: "lambat"
, "sedang"
, dan "cepat"
. Anda mencatat kecepatan setiap teman-teman Anda dan menyimpannya sebagai vektor_kecepatan
.
Latihan 1.36
Jadikan vektor_kecepatan
sebagai sebuah vektor yang memiliki lima elemen, masing-masing merepresentasikan kecepatan teman-teman Anda dalam membalas diskusi di forum. Tiap-tiap elemen tersebut isinya "lambat"
, "sedang"
, atau "cepat"
. Gunakan informasi berikut.
- Teman 1 lambat.
- Teman 2 sedang.
- Teman 3 lambat.
- Teman 4 sedang.
- Teman 5 cepat.
Di latihan ini, Anda belum perlu mengatur vektor_kecepatan
sebagai sebuah faktor.
# no pec
# Membuat vektor_kecepatan
vektor_kecepatan <-
# Membuat vektor_kecepatan
vektor_kecepatan <- c("lambat", "sedang", "lambat", "sedang", "cepat")
ex() %>% check_object("vektor_kecepatan") %>% check_equal(incorrect_msg = "Hei, `vektor_kecepatan` seharusnya sebuah vektor dengan lima elemen, masing-masing menunjukkan kecepatan teman Anda. Jangan menggunakan huruf kapital karena R sensitif!")
success_msg("Kerja bagus! Silakan lanjut ke pembahasan berikutnya.")
vektor_kecepatan
sebagai sebuah vektor yang isinya "lambat"
, "sedang"
, atau "cepat"
.Di Latihan 1.36, vektor_kecepatan
yang telah Anda buat masih berupa vektor. Vektor tersebut dapat kita buat sebagai sebuah faktor ordinal karena level-levelnya dapat diurutkan. Bawaannya, fungsi factor()
akan mengubah vektor_kecepatan
menjadi faktor tak terurut. Untuk menjadikannya faktor terurut, kita perlu menambahkan dua argumen tambahan: ordered
dan levels
.
factor(contoh_vektor,
ordered = TRUE,
levels = c("lev1", "lev2" ...))
Dengan mengatur ordered
bernilai TRUE
dalam fungsi factor()
, Anda mengindikasikan bahwa faktor tersebut terurut. Dengan argumen levels
Anda menunjukkan urutan level-level yang tepat.
Latihan 1.37
Dari vektor_kecepatan
, buatlah sebuah vektor faktor yang terurut: vektor_kecepatan_faktor
. Aturlah ordered
menjadi TRUE
dan levels
sebagai c("lambat", "sedang", "cepat")
.
# no pec
# Membuat vektor_kecepatan
vektor_kecepatan <- c("lambat", "sedang", "lambat", "sedang", "cepat")
# Ubah vektor_kecepatan menjadi sebuah faktor yang terurut
vektor_kecepatan_faktor <-
# Tampilkan vektor_kecepatan_faktor
vektor_kecepatan_faktor
summary(vektor_kecepatan_faktor)
# Membuat vektor_kecepatan
vektor_kecepatan <- c("lambat", "sedang", "lambat", "sedang", "cepat")
# Ubah vektor_kecepatan menjadi sebuah faktor yang terurut
vektor_kecepatan_faktor <- factor(vektor_kecepatan, ordered = TRUE, levels = c("lambat", "sedang", "cepat"))
# Tampilkan vektor_kecepatan_faktor
vektor_kecepatan_faktor
summary(vektor_kecepatan_faktor)
msg = "Jangan mengubah kode yang mendefinisikan variabel `vektor_kecepatan`."
ex() %>% check_object("vektor_kecepatan", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_function("factor") %>% {
check_arg(., 'x') %>% check_equal(incorrect_msg="Argumen pertama yang dimasukkan ke dalam `factor()` seharusnya `vektor_kecepatan`.")
check_arg(., 'ordered') %>% check_equal(incorrect_msg="Pastikan untuk menjadikan `ordered = TRUE` di dalam perintah `factor()`.")
check_arg(., 'levels') %>% check_equal(incorrect_msg="Pastikan untuk menjadikan `levels = c(\"slow\", \"medium\", \"fast\")` di dalam fungsi `factor()`.")
}
ex() %>% check_object("vektor_kecepatan_faktor") %>% check_equal(eq_condition = "equal", incorrect_msg="Masih adalah yang salah dalam `vektor_kecepatan_faktor`. Pastikan hanya menuliskan `vektor_kecepatan`, `ordered = TRUE` and `levels = c(\"lambat\", \"sedang\", \"cepat\")` ke dalam fungsi `factor()`.")
success_msg("Mantap! Perhatikan console-nya. Sekarang console tersebut menunjukkan bahwa level-levelnya terurut, yang ditandai dengan simbol `<`. Silakan lanjut.")
factor()
untuk menjadikan vektor_kecepatan
sebagai sebuah faktor. Aturlah ordered = TRUE
karena level-levelnya terurut. Aturlah levels = c("lambat", "sedang", "cepat")
.Membandingkan Faktor-Faktor Terurut
Di akhir dinamika kerja kelompok, Anda dan teman-teman Anda melakukan refleksi terhadap diskusi di dalam forum. Sebagai ketua kelompok, Anda diberi kesempatan untuk memberikan evaluasi terhadap proses diskusi tersebut.
Sayangnya, Anda lupa terhadap kecepatan menanggapi diskusi yang dilakukan teman ketiga dan kelima Anda. Padahal Anda ingin mengetahui apakah teman ketiga Anda lebih cepat membalas diskusi daripada teman kelima Anda. Untungnya, R bisa membantu Anda! Silakan cek di Latihan 1.38.
Latihan 1.38
- Gunakan
[3]
untuk memilih elemen ketiga darivektor_kecepatan_faktor
dan jadikan hasilnya sebagaitmn3
. Elemen ini merepresentasikan kecepatan teman ketiga Anda. - Lakukan cara yang serupa untuk melihat kecepatan teman kelima Anda. Jadikan hasilnya sebagai
tmn5
. - Periksalah apakah
tmn3
lebih besar daritmn5
dan tampilkan hasilnya. Untuk melakukannya, Anda dapat membandingkan kedua nilai tersebut dengan tanda>
.
# no pec
# Membuat vektor_kecepatan_faktor
vektor_kecepatan <- c("lambat", "sedang", "lambat", "sedang", "cepat")
vektor_kecepatan_faktor <- factor(vektor_kecepatan, ordered = TRUE, levels = c("lambat", "sedang", "cepat"))
# Nilai faktor untuk teman ketiga
tmn3 <-
# Nilai faktor untuk teman kelima
tmn5 <-
# Apakah teman ketiga lebih cepat dari teman kelima Anda?
# Membuat vektor_kecepatan_faktor
vektor_kecepatan <- c("lambat", "sedang", "lambat", "sedang", "cepat")
vektor_kecepatan_faktor <- factor(vektor_kecepatan, ordered = TRUE, levels = c("lambat", "sedang", "cepat"))
# Nilai faktor untuk teman ketiga
tmn3 <- vektor_kecepatan_faktor[3]
# Nilai faktor untuk teman kelima
tmn5 <- vektor_kecepatan_faktor[5]
# Apakah teman ketiga lebih cepat dari teman kelima Anda?
tmn3 > tmn5
msg = "Jangan mengganti apapun terhadap perintah yang mendefinisikan `vektor_kecepatan` and `vektor_kecepatan_faktor`!"
ex() %>% check_object("vektor_kecepatan", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("vektor_kecepatan_faktor", undefined_msg = msg) %>% check_equal(eq_condition = "equal", incorrect_msg = msg)
msg <- "Apakah Anda sudah tepat memilih nilai faktor untuk teman %s? Anda dapat menggunakan `vektor_kecepatan_faktor[%s]`."
ex() %>% check_object("tmn3") %>% check_equal(eq_condition = "equal", incorrect_msg = sprintf(msg,"ketiga", "3"))
ex() %>% check_object("tmn5") %>% check_equal(eq_condition = "equal",incorrect_msg = sprintf(msg, "kelima", "5"))
ex() %>% check_output_expr("tmn5 > tmn5", missing_msg = "Apakah Anda sudah membandingkan `tmn3` dan `tmn5` dengan tepat? Anda dapat menggunakan `>`. Tampilkan hasilnya.")
success_msg("Bellissimo! Latihan 1.38 merupakan latihan terakhir di subbab ini! Dengan pemahaman mengenai vektor, matriks, dan faktor, Anda siap untuk mempelajari data frame. Data frame ini merupakan struktur data yang sangat penting di R!")
vektor_kecepatan_faktor[3]
. - Untuk membandingkan dua kecepatan teman Anda, gunakan tanda >
.