Pengantar Pemrograman R

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.")
Cukup kirimkan jawabannya dengan klik tombol Submit dan cermati luarannya.

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.")
Perintah 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.")
Terapkan fungsi 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.")
Gunakan 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!")
Gunakan 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 dalam df_ku;
  • df_ku[1:3, 2:5] memilih elemen-elemen dalam baris 1, 2, 3 dan kolom 2, 3, 4, 5 dalam df_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.")
Untuk melihat diameter Venus, Anda perlu menjalankan 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.")
Anda dapat memilih lima baris pertama dengan 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.")
Ingat bahwa untuk memilih semua kolom, Anda perlu mengosongkan bagian kolom dalam [ ]. 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.")
Perintah 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!")
Silakan bermain-mainlah dengan fungsi 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() terhadap df_planet$diameter (kolom diameter dalam df_planet). Jadikan hasilnya sebagai vektor posisi.
  • Ubahlah susunan df_planet dengan menggunakan vektor posisi 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!")
- Gunakan 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?

Uji Pengetahuan Anda

Kerjakan soal-soal tentang Data Frame berikut dengan tepat!

Perintah berikut menunjukkan beberapa baris pertama data frame df_ku. Lengkapi bagian yang kosong!

(df_ku)

Tuliskan baris perintah untuk melihat struktur data frame yang bernama df.

Benar atau salah. Fungsi data.frame() tidak mementingkan urutan argumen-argumen yang menjadi inputnya.

Anda akan memilih variabel "usia" dalam data frame "demografi". Kode yang dapat digunakan adalah ...

Perhatikan deskripsi soal berikut. Perintah yang dapat digunakan adalah ...

Anda memiliki sebuah data frame bernama "asean" yang isinya adalah negara-negara ASEAN beserta dengan atribut-atributnya. Salah satu variabelnya adalah "populasi", yang menunjukkan jumlah penduduk (dalam juta). Anda ingin mendapatkan negara-negara yang populasinya maksimal 50 juta.

Perintah order(c(12, 5, 8, 13)) akan menghasilkan luaran ...

[1]