Data Frame
Data yang akan perlu Anda eksplorasi dan analisis melalui R pada umumnya berupa data frame. Oleh karena itu, Anda akan dipandu untuk mempelajari dan berlatih tentang data frame. Di akhir subbab ini, Anda akan mampu membuat sebuah data frame, memilih bagian-bagian penting dari sebuah data frame, dan mengurutkan sebuah data frame berdasarkan variabel-variabelnya.
Kilas Balik Vektor dan Matriks
Sampai di sini, kita telah mempelajari vektor dan matriks. Semua elemen kedua struktur data ini harus memiliki tipe data yang sama. Jika kita memaksa untuk memasukkan elemen-elemen yang jenisnya berbeda ke vektor atau matriks, R juga akan memaksa dengan mengubah jenis data dari elemen-elemen tersebut.
Misalnya kita membuat matriks contoh_matriks
seperti ini.
v1 <- c("A", "B", "C")
v2 <- c(TRUE, TRUE, FALSE)
v3 <- c(25, 17, 45)
v4 <- c(1.66, 1.50, 1.65)
contoh_matriks <- matrix(c(v1, v2, v3, v4),
nrow = 3,
byrow = FALSE)
contoh_matriks
Ketika kode tersebut dijalankan di R, kita akan memperoleh luaran seperti berikut.
[,1] [,2] [,3] [,4]
[1,] "A" "TRUE" "25" "1.66"
[2,] "B" "TRUE" "17" "1.5"
[3,] "C" "FALSE" "45" "1.65"
Apa yang bisa Anda amati? Jenis data semua elemen dalam matriks tersebut dijadikan seragam, yaitu character!
Padahal ketika kita melakukan survei pasar, misalnya, kita memberikan pertanyaan-pertanyaan seperti ini.
- Apakah Anda telah menikah? Atau pertanyaan dengan jawaban ya/tidak lainnya (
logical
) - Berapa umur Anda? (
numeric
) - Apa pendapat Anda tentang produk ini? Atau pertanyaan terbuka lainnya (
character
) - …
Hasil dari survei seperti itu, yaitu tanggapan dari responden, merupakan sebuah set data yang berisi berbagai macam jenis data. Untungnya, data frame dapat menangani data yang seperti itu.
Selayang Pandang Tentang Data Frame
Data frame adalah data yang ditampilkan dalam format tabel. Data frame dapat memuat jenis-jenis data yang berbeda di dalamnya. Misalnya, kolom pertama berjenis logical
, kolom kedua numeric
, dan kolom ketiga character
.
Sebuah data frame memiliki kolom-kolom dan baris-baris. Setiap kolomnya merupakan variabel dan baris-barisnya merupakan observasi atau pengamatan. Konsep data seperti ini telah banyak digunakan oleh perangkat lunak statistik lainnya, seperti SAS dan SPSS.
Di Latihan 1.39, Anda akan diajak untuk melihat contoh sebuah data frame bawaan R, mtcars
.
Latihan 1.39
Klik submit untuk mengirimkan jawabannya. Data frame mtcars
akan ditampilkan setelah Anda mengirimkan jawaban tersebut.
# no pec
# Tampilkan data frame bawaan R
mtcars
# Tampilkan data frame bawaan R
mtcars
ex() %>% check_output_expr("mtcars", missing_msg = "Jangan mengganti apapun di editor. Pastikan luarannya `mtcars`.")
success_msg("Mantap! Lanjut ke pembahasan berikutnya.")
Memahami Set Data
Apa yang Anda amati dari luaran di Latihan Latihan 1.39? Banyak sekali mobil dengan segala fiturnya!
Ketika menganalisis data, seringkali kita akan berjumpa dengan set data dan data frame yang begitu besar. Kita akan kewalahan jika langsung mencermati semua nilai di dalamnya. Padahal, langkah awal kita untuk menganalis data adalah memahami dan mengakrabkan diri dengan data tersebut. Untuk itu, kita tidak perlu melihat semua nilainya, tetapi kita awali dulu dengan melihat bagian kecil dari set data tersebut.
Kita dapat menggunakan fungsi head()
untuk melihat beberapa baris awal sebuah set data. Selain itu, kita juga dapat memanfaatkan fungsi tail()
untuk melihat beberapa baris akhirnya.
Kedua fungsi tersebut sama-sama akan menampilkan kepala kolom, yang berisi nama-nama variabel di dalam set data tersebut.
Latihan 1.40
Gunakan head()
pada set data mtcars
untuk mencermati kepala kolom dan beberapa baris awalnya.
# no pec
# Kenakan fungsi head() kepada mtcars
# Kenakan fungsi head() kepada mtcars
head(mtcars)
ex() %>% check_function("head") %>% check_arg('x') %>% check_equal(incorrect_msg = "Apakah Anda dengan benar menginputkan `mtcars` ke fungsi `head()`?")
ex() %>% check_output_expr("head(mtcars)", missing_msg = "Cukup tampilkan hasil dari perintah `head()`, tidak perlu menjadikannya sebagai sebuah variabel baru.")
success_msg("Luar biasa! Apa yang bisa Anda amati dari luarannya? Misalnya, variabel `hp` menunjukkan tenaga setiap mobilnya. Dari tampilan enam observasi pertama itu, kita dapat melihat bahwa Datsun memiliki tenaga yang paling rendah. Silakan lanjut.")
head(mtcars)
akan menunjukkan beberapa observasi pertama dari set data mtcars
.Memahami Struktur Set Data
Cara lain yang sering digunakan untuk melihat gambaran umum sebuah data adalah dengan memanfaatkan fungsi str()
. Fungsi ini akan menampilkan struktur data tersebut. Untuk sebuah data frame, fungsi ini akan menampilkan hal-hal berikut.
- Total banyaknya observasi (misalnya 32 jenis mobil)
- Total banyaknya variabel (misalnya 11 fitur mobil)
- Daftar lengkap nama-nama variabelnya (misalnya
mpg
,cyl
, …) - Jenis data tiap-tiap variablenya (misalnya
num
) - Observasi-observasi pertamanya
Fungsi str()
tersebut sangat bermanfaat untuk diterapkan di awal-awal perjumpaan dengan sebuah set data. Fungsi ini memberikan gambar besarnya terlebih dahulu sebelum kita melakukan analisis lebih lanjut.
Latihan 1.41
Selidikilah struktur matcars
. Pastikan Anda mendapatkan banyak observasi, variabel, dan jenis data yang sama dengan yang telah disebutkan sebelumnya.
# no pec
# Selidikilah struktur mtcars
# Selidikilah struktur mtcars
str(mtcars)
ex() %>% check_output_expr("str(mtcars)", missing_msg = "Sudahkah Anda menggunakan fungsi `str()` terhadap `mtcars`?")
success_msg("Kerja bagus! Anda dapat menemukan banyak informasi dengan menerapkan `str()` terhadap sebuah set data. Silakan lanjut ke pembahasan berikutnya.")
str()
terhadap mtcars
.Membuat Sebuah Data Frame
Di bagian sebelumnya Anda telah dapat memanggil set data bawaan R dan menyelidiki strukturnya. Di bagian ini, Anda akan membuat sendiri data framenya.
Kita akan membuat data frame yang mendeskripsikan beberapa karakteristik delapan planet di tata surya kita. Karakteristik tersebut adalah sebagai berikut.
- Jenis planetnya (planet kebumian atau raksasa gas)
- Diameternya relatif terhadap diameter bumi
- Periode rotasinya relatif terhadap periode rotas bumi
- Apakah planet tersebut memiliki cincin atau tidak (TRUE atau FALSE)
Berdasarkan keempat karakteristik tersebut, kita akan membuat vektor jenis
, diameter
, rotasi
, dan cincin
. Vektor-vektor ini telah disediakan di dalam editor di Latihan 1.42. Elemen pertama dari setiap vektor tersebut bersesuaian dengan observasi pertama.
Kita membuat sebuah data frame dengan menggunakan fungsi data.frame()
. Sebagai argumen-argumen fungsi tersebut, kita inputkan vektor-vektor yang telah kita buat sebelumnnya. Vektor-vektor tersebut akan menjadi kolom-kolom data frame yang dihasilkan. Karena setiap kolom harus sama panjang, setiap vektor yang kita inputkan panjangnya juga harus sama.
Latihan 1.42
Gunakan fungsi data.frame()
untuk membuat sebuah data frame. Secara terurut, inputkan vektor nama
, jenis
, diameter
, rotasi
, dan cincin
sebagai argumen-argumen fungsi tersebut. Jadikan data frame yang dihasilkan sebagai df_planet
.
# no pec
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame
df_planet <-
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame
df_planet <- data.frame(nama, jenis, diameter, rotasi, cincin)
msg = "Jangan mengganti apapun tentang definisi vektor-vektor yang disediakan. Cukup gunakan `data.frame()` untuk membuat `df_planet`."
ex() %>% check_object("nama", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("jenis", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("diameter", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("rotasi", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("cincin", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("df_planet") %>% check_equal(incorrect_msg = "Sudahkah Anda menggunakan `data.frame()` untuk membuat `df_planet`. Di dalam `data.frame()`, pastikan untuk menginputkan vektor-vektor ini dalam urutan yang tepat: `nama`, `jenis`, `diameter`, `rotasi` dan `cincin`.")
success_msg("Kerja bagus! Selanjutnya Anda akan mencermati data frame yang baru saja Anda buat di pembahasan berikutnya. Silakan lanjut.")
data.frame(nama, jenis, diameter, ...)
. Silakan dilanjutkan kodenya.Data frame df_planet
yang baru saja Anda buat memuat delapan observasi dan lima variabel. Data frame itu sudah tersedia di dalam editor dan langsung bisa digunakan.
Latihan 1.43
Gunakan str()
untuk menyelidiki struktur df_planet
.
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame
df_planet <- data.frame(nama, jenis, diameter, rotasi, cincin)
# Melihat struktur df_planet
# Melihat struktur df_planet
str(df_planet)
msg = "Jangan menghapus atau menindih data frame `df_planet` yang telah tersedia di editor!"
ex() %>% check_object("df_planet", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_output_expr("str(df_planet)", missing_msg = "Sudahkah Anda dengan tepat menampilkan struktur `df_planet`? Gunakan `str()` untuk melakukannya!")
success_msg("Jempol! Sekarang Anda telah memiliki pemahaman terhadap set data `df_planet`. Selanjutnya Anda akan belajar bagaimana memilih elemen dari set data tersebut. Mari lanjut ke pembahasan berikutnya!")
str(df_planet)
.Memilih Elemen-Elemen Data Frame
Serupa dengan vektor dan matriks, kita dapat memilih elemen-elemen data frame dengan menggunakan tanda kurung siku [ ]
. Dengan menggunakan koma di dalamnya, kita dapat mengindikasikan baris dan kolom mana yang akan kita pilih. Misalnya:
df_ku[1, 2]
memilih elemen pada baris pertama dan kolom kedua dalamdf_ku
;df_ku[1:3, 2:5]
memilih elemen-elemen dalam baris 1, 2, 3 dan kolom 2, 3, 4, 5 dalamdf_ku
.
Mungkin suatu waktu kita ingin memilih semua elemen dalam baris tertentu. Untuk melakukannya, misalnya, kita dapat menggunakan df_ku[1, ]
. Perintah ini akan memilih semua elemen dalam baris pertama dari data frame df_ku
.
Sekarang mari kita terapkan teknik-teknik tersebut pada data frame df_planet
!
Latihan 1.44
- Dari
df_planet
, pilihlah diameter dari Merkurius: nilai yang terletak pada baris pertama dan kolom ketiga. Tampilkan nilainya. - Dari
df_planet
, pilihlah semua data planet Mars (semua elemen pada baris keempat). Tampilkan nilai-nilainya.
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame
df_planet <- data.frame(nama, jenis, diameter, rotasi, cincin)
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Tampilkan diameter dari Merkurius (baris 1, kolom 3)
# Tampilkan data Mars (keseluruhan elemen baris keempat)
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Tampilkan diameter dari Merkurius (baris 1, kolom 3)
df_planet[1, 3]
# Tampilkan data Mars (keseluruhan elemen baris keempat)
df_planet[4, ]
msg = "Jangan menghapus atau menindih data frame `df_planet`!"
ex() %>% check_object("df_planet", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_output_expr("df_planet[1,3]", missing_msg = "Sudahkah Anda memilih dan menampilkan diameter Merkurius dengan benar? Anda dapat menggunakan `[1,3]`.")
ex() %>% check_output_expr("df_planet[4, ]", missing_msg = "Sudahkan Anda memilih dan menampilkan semua data Mars dengan tepat? Anda dapat menggunakan `[4,]`.")
success_msg("Mantap! Selain dengan menggunakan indeksnya, Anda dapat memilih kolom-kolom sebuah data frame dengan namanya. Ingin tahu caranya? Ayo lanjut ke pembahasan berikutnya.")
df_planet[2, 3]
. Bagaimana dengan diameter Merkurius kalau demikian?Selain dengan menggunakan indeksnya, kita dapat memilih kolom-kolom sebuah data frame dengan memakai nama-namanya.
Misalkan Anda ingin memilih tiga elemen pertama dalam kolom tipe
. Dengan indeks, yang dapat Anda lakukan adalah seperti ini.
df_planet[1:3, 2]
Kekurangan cara seperti itu adalah bahwa kita perlu mengetahui atau mencari tahu urutan kolom tipe
. Kita akan kewalahan jika set datanya besar. Untuk mengatasinya, kita dapat menggunakan nama kolomnya.
df_planet[1:3, "tipe"]
Latihan 1.45
Pilihlah dan tampilkan lima elemen pertama dalam kolom "diameter"
dari df_planet
.
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame
df_planet <- data.frame(nama, jenis, diameter, rotasi, cincin)
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Pilih dan tampilkan lima elemen pertama dalam kolom diameter
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Pilih dan tampilkan lima elemen pertama dalam kolom diameter
df_planet[1:5, "diameter"]
msg = "Jangan menghapus atau menindih data frame `df_planet`!"
ex() %>% check_object("df_planet", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_output_expr("df_planet[1:5, \"diameter\"]", missing_msg = "Sudahkah Anda memilih dan menampilkan lima elemen pertama kolom diameter dengan benar? Anda dapat menggunakan `[1:5, \"diameter\"]`.")
success_msg("Cakep! Silakan lanjut ke pembahasan berikutnya.")
df_planet[1:5, ...]
. Apakah Anda dapat mengisi ... jika Anda hanya ingin memilih nilai-nilai dari kolom "diameter"
?Planet-Planet Bercincin
Seringkali kita ingin memilih semua nilai dari sebuah kolom, yaitu variabel tertentu dalam sebuah data frame. Jika kita ingin memilih variabel diameter
, misalnya, dua cara ini dapat kita gunakan.
df_planet[,3]
df_planet[,"diameter"]
Akan tetapi, ada cara yang lebih singkat. Jika kolom-kolomnya memiliki nama, kita dapat gunakan $
seperti berikut.
df_planet$diameter
Latihan 1.46
- Pilihlah kolom
cincin
dengan menggunakan$
dan simpan hasilnya sebagai sebuah variabel baru,vektor_cincin
. - Tampilkan
vektor_cincin
untuk mengecek apakah Anda sudah benar.
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame
df_planet <- data.frame(nama, jenis, diameter, rotasi, cincin)
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Pilih variabel cincin dari df_planet
vektor_cincin <-
# Tampilkan vektor_cincin
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Pilih variabel cincin dari df_planet
vektor_cincin <- df_planet$cincin
# Tampilkan vektor_cincin
vektor_cincin
msg = "Jangan menghapus atau menindih data frame `df_planet`!"
ex() %>% check_object("df_planet", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("vektor_cincin") %>% check_equal(incorrect_msg = "Apakah Anda telah memilih variabel `cincin` dari `df_planet`? Gunakan `$cincin`. Simpan hasilnya sebagai `vektor_cincin`.")
ex() %>% check_output_expr("vektor_cincin", missing_msg = "Jangan lupa untuk menampilkan `vektor_cincin` setelah Anda membuatnya!")
success_msg("Luar biasa! Silakan lanjut ke bagian berikutnya untuk mempelajari cara lainnya dalam memilih bagian tertentu dari sebuah data frame!")
df_planet$diameter
akan memilih variabel diameter
dari df_planet
. Bagaimana untuk variabel cincin
?Apakah Anda ingat planet-planet apa saja yang memiliki cincin? Jika tidak, R dapat membantu Anda.
Jika kita tikkan vektor_cincin
dalam console, kita mendapatkan luaran seperti ini.
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
Ini artinya bahwa empat observasi (atau dalam hal ini planet) pertamanya tidak memiliki cincin (FALSE
), tetapi yang lainnya memilikinya (TRUE
). Akan tetapi, kita belum memiliki gambaran umum dari planet-planet yang bercincin tersebut, misalnya namanya, diameternya, dan sebagainya.
Mari kita coba gunakan vektor_cincin
untuk memilih data dari planet-planet yang bercincin!
Latihan 1.47
Kode di dalam editor fungsinya untuk memilih kolom "nama"
dari semua planet yang bercincin. Modifikasilah kode tersebut sehingga tidak hanya kolom "nama"
saja yang ditampilkan, melainkan semua kolom dari planet-planet yang bercincin.
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame dan vektor
df_planet <- data.frame(nama, jenis, diameter, rotasi, cincin)
vektor_cincin <- df_planet$cincin
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Modifikasilah kode berikut agar memilih semua kolom planet-planet bercincin
df_planet[vektor_cincin, "nama"]
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Modifikasilah kode berikut agar memilih semua kolom planet-planet bercincin
df_planet[vektor_cincin,]
msg <- "Jangan menghapus atau menindih `df_planet` atau `vektor_cincin`!"
ex() %>% check_object("df_planet", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("vektor_cincin", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_output_expr('df_planet[vektor_cincin, ]', missing_msg = "Sudahkah Anda memodifikasi kodenya agar memilih semua kolom planet-planet yang bercincin? Gunakan `df_planet[vektor_cincin, ]`. Pastikan untuk menyertakan koma.")
success_msg("Bagus! Tapi ini adalah cara yang agak panjang. Bagian berikutnya akan menunjukkan cara yang lebih singkat.")
[ ]
. Artinya, Anda perlu mentikkan [vektor_cincin, ]
.Planet-Planet Bercincin, Tapi Lebih Singkat
Jadi apa yang telah kita lakukan pada latihan sebelumnya? Kita telah memilih bagian dari sebuah set data (df_planet
) berdasarkan kondisi-kondisi tertentu (bercincin atau tidak), dan kita telah memanggil semua data yang relevan.
Sekarang kita akan berkenalan dengan fungsi subset()
. Fungsi ini dapat melakukan hal yang sama dengan yang kita lakukan sebelumnya, tetapi dengan lebih singkat.
subset(df_ku, subset = beberapa_kondisi)
Argumen pertama fungsi subset()
menunjukkan data frame yang akan kita ekstrak bagiannya. Dengan menambahkan argumen kedua, kita menginformasikan ke R untuk memilih bagian-bagian yang sesuai dengan kondisi yang kita berikan.
Kode di bawah ini akan memberikan hasil yang sama persis dengan yang kita lakukan di Latihan 1.47, tapi kali ini kita tidak memerlukan vektor_cincin
!
subset(df_planet, subset = cincin)
nama jenis diameter rotasi cincin
5 Jupiter Raksasa gas 11.209 0.41 TRUE
6 Saturnus Raksasa gas 9.449 0.43 TRUE
7 Uranus Raksasa gas 4.007 -0.72 TRUE
8 Neptunus Raksasa gas 3.883 0.67 TRUE
Latihan 1.48
Gunakan fungsi subset()
untuk memilih planet-planet yang diameternya kurang dari diameter bumi. Karena ukuran diameter dalam data frame tersebut merupakan diameter relatif terhadap diameter bumi, kondisi yang perlu digunakan adalah diameter < 1
.
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame dan vektor
df_planet <- data.frame(nama, jenis, diameter, rotasi, cincin)
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Pilihlah yang diameternya < 1
# Data frame df_planet dari latihan sebelumnya telah tersedia
# Pilihlah yang diameternya < 1
subset(df_planet, subset = diameter < 1)
msg = "Jangan menghapus atau menindih data frame `df_planet` yang sudah disediakan untuk Anda!"
ex() %>% check_object("df_planet", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_correct({
ex() %>% check_output_expr("subset(df_planet, subset = diameter < 1)", missing_msg = "Sudahkah Anda menginputkan `subset = ...` sebagai argumen dalam fungsi `subset()`? Kondisi yang digunakan di sini adalah `diameter < 1`. Tampilkan hasilnya.")
}, {
ex() %>% check_function("subset") %>% check_arg('x') %>% check_equal(incorrect_msg = "Argumen pertama yang perlu diinputkan ke dalam `subset()` seharusnya adalah `df_planet`.")
})
success_msg("Kerja hebat! Tidak hanya singkat, fungsi `subset()` mungkin juga lebih mudah dipahami orang lain ketika membaca kode Anda. Silakan lanjut.")
subset(df_planet, subset = ...)
hampir menyelesaikannya. Dapatkah Anda mengisi bagian yang kosong?Sortir
Kita dapat menyortir data kita berdasarkan variabel tertentu dalam sebuah set data. Kita dapat melakukannya di R dengan menggunakan fungsi order()
.
Fungsi tersebut akan memberikan posisi-posisi terperingkat untuk setiap elemen dalam sebuah variabel. Misalnya adalah seperti ini.
a <- c(1000, 10, 100)
order(a)
Penggunaan order()
terhadap vektor a
tersebut mengurutkan setiap elemennya sehingga luarannya adalah seperti ini.
[1] 2 3 1
Bilangan 10 yang merupakan elemen ke-2 merupakan elemen terkecil, sehingga 2 ditampilkan sebagai urutan pertama dalam luarannya. Bilangan 100 merupakan bilangan terkecil yang kedua, sehingga posisinya, yaitu 3, dituliskan setelahnya. Terakhir, adalah 1000 yang posisinya dituliskan di bagian terakhir.
Ini artinya kita dapat menggunakan hasil order(a)
untuk merubah susunan vektor a
.
a[order(a)]
Dengan kode itu, kita akan mendapatkan hasil seperti berikut.
[1] 10 100 1000
Latihan 1.49
Bereksperimenlah dengan fungsi order() di dalam editor. Jika sudah, kirimkan jawaban Anda dengan mengklik tombol Submit dan amatilah hasilnya.
# no pec
# Bermain-mainlah dengan fungsi order()
# Bermain-mainlah dengan fungsi order()
success_msg("Jempol! Sekarang mari kita gunakan fungsi `order()` untuk menyortir data frame Anda!")
order()
.Menyortir Data Frame
Sekarang Anda telah paham tentang fungsi order()
. Mari kita gunakan fungsi itu untuk menyortir data frame kita sehingga datanya terurut dari planet terkecil ke terbesar. Kita sortir datanya berdasarkan kolom diameter
.
Latihan 1.50
- Terapkah fungsi
order()
terhadapdf_planet$diameter
(kolom diameter dalamdf_planet
). Jadikan hasilnya sebagai vektorposisi
. - Ubahlah susunan
df_planet
dengan menggunakan vektorposisi
sebagai indeks-indeks barisnya di dalam tanda kurung siku. Tampilkan hasilnya.
# Pendefinisian vektor-vektor
nama <- c("Merkurius", "Venus", "Bumi", "Mars", "Jupiter", "Saturnus", "Uranus", "Neptunus")
jenis <- c("Planet kebumian", "Planet kebumian", "Planet kebumian", "Planet kebumian", "Raksasa gas", "Raksasa gas", "Raksasa gas", "Raksasa gas")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotasi <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
cincin <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
# Membuat sebuah data frame dan vektor
df_planet <- data.frame(nama, jenis, diameter, rotasi, cincin)
# Data frame df_planet telah disediakan untuk Anda
# Gunakan order() untuk membuat vektor posisi
posisi <-
# Gunakan vektor posisi untuk mengubah susunan df_planet
# Data frame df_planet telah disediakan untuk Anda
# Gunakan order() untuk membuat vektor posisi
posisi <- order(df_planet$diameter)
# Gunakan vektor posisi untuk mengubah susunan df_planet
df_planet[posisi, ]
msg = "Jangan menghapus atau mengubah data frame `df_planet` yang telah disediakan untuk Anda!"
ex() %>% check_object("df_planet", undefined_msg = msg) %>% check_equal(incorrect_msg = msg)
ex() %>% check_object("posisi") %>% check_equal(incorrect_msg = "Sudahkah Anda menghitung variabel `posisi` dengan benar? Gunakan `order(df_diameter$diameter)`.")
ex() %>% check_output_expr("df_planet[posisi,]",missing_msg = "Gunakan `df_planet[posisi, ]` untuk menyortir `df_planet`. Koma di dalam tanda kurung siku tersebut krusial!")
success_msg("Luar biasa! Latihan ini merupakan latiahan terakhir di subbab data frame. Ingat bahwa data frame sangat penting di R, Anda akan membutuhkannya setiap saat. Struktur data lain yang sering digunakan adalah daftar atau list. Topik tersebut akan dibahas pada bagian berikutnya. Semangat!")
order(df_planet$diameter)
untuk membuat vektor posisi
. - Sekarang Anda dapat menggunakan vektor posisi
di dalam tanda kurung siku: df_planet[...]
. Dapatkah Anda mengisi titik-titiknya?