Cara membuat tabel di R dengan baris yang dapat diperluas

Tabel interaktif dengan pencarian dan penyortiran bisa menjadi cara yang bagus untuk menjelajahi data. Dan terkadang, Anda mungkin ingin membagikan data itu dengan orang lain - termasuk data hanya teks seperti daftar tutorial video Lakukan Lebih Banyak Dengan R.

Namun jika data tersebut menyertakan kolom dengan entri yang cukup panjang, kolom tersebut mungkin tidak pas di tabel dengan lebar layar Anda. Ini bisa sangat rumit jika tidak setiap baris menyertakan kolom yang sangat lebar. Misalnya, tabel hasil kuesioner yang salah satu kolomnya adalah "Apakah Anda memiliki komentar tambahan?" Tidak semua orang boleh.

Di situlah tabel dengan baris yang dapat diperluas bisa berguna. Pada konferensi jurnalisme data NICAR awal tahun ini, saya memposting formulir sehingga pembicara (dan peserta lainnya) dapat mengirimkan tautan ke sesi presentasi. Beberapa orang menambahkan komentar tambahan; yang lainnya tidak. Menampilkan kolom itu secara default akan menghabiskan banyak ruang layar.

Sebaliknya, kolom komentar tersebut ditampilkan di tabel interaktif sumber daya NICAR hanya jika pengguna mengklik ikon baris luaskan. Tidak setiap baris dapat diperluas dengan ikon yang dapat diklik di sebelah kiri nama Topik karena tidak setiap baris memiliki data di bidang itu, seperti yang Anda dapat (semoga) lihat pada gambar di bawah.

Sharon Machlis,

Mari kita lihat cara membuat meja seperti ini. 

Jika Anda ingin mengikuti, instal dan muat paket reactable. Untuk demo ini, Anda juga perlu menginstal paket rio, glue, htmltools, dan dplyr.

Anda dapat mengunduh data yang akan saya gunakan dalam demo ini dari tautan di bawah. Ini adalah kumpulan data kecil (15 baris) tentang sesi R dan Python di konferensi NICAR tahun ini.

unduh Do More With R Demo Kumpulan Data untuk Tabel dengan Baris yang Dapat Diperluas 15 baris informasi tentang sesi R dan Python di konferensi jurnalisme data NICAR 2020 Sharon Machlis

Muat reactable dan dplyr di R

Pada kode di bawah ini, saya memuat reactable dan dplyr dan kemudian mengimpor data saya menggunakan rio::import()

perpustakaan (bereaksi)

perpustakaan (dplyr)

nicar <- rio :: import ("nicar.csv")

Data memiliki kolom untuk nama sumber daya (Apa), Penulis (Siapa), TheURL, Tag, Jenis, dan Komentar.

Selanjutnya, saya ingin membuat kolom baru bernama Sumber daya dengan tautan yang dapat diklik ke setiap sumber daya. Saya hanya menulis sedikit HTML dasar menggunakan kolom What dan TheURL untuk memudahkan pengguna mendapatkan sumber daya yang ditampilkan di tabel.

Kemudian saya memilih kolom yang saya inginkan dalam urutan yang saya inginkan.

nicar%

mengubah(

Resource = glue :: glue ("{What}")

)%>%

pilih (Sumber Daya, Siapa, Tag, Jenis, Komentar)

Mulailah dengan tabel reaktabel dasar 

Akhirnya, saya membuat tabel reaktabel dasar dan default.

bereaksi (nicar)

Dan tabel ini sederhana. Belum ada kotak telusur dan kolom Sumber daya menampilkan kode HTML sebenarnya alih-alih ditampilkan sebagai HTML

Sharon Machlis,

Di grup kode berikutnya, saya menambahkan kotak pencarian ke tabel dan ikon panah kecil yang menunjukkan bahwa kolom dapat diurutkan.

reactable (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Untuk memberitahu reactable untuk menampilkan kolom Resource sebagai HTML, saya menggunakan argumen kolom dan daftar di mana colDef menetapkan atribut satu atau lebih kolom. Di bawah ini, saya mengatur html = trueuntuk kolom Resource sehingga ini ditampilkan sebagai HTML, dan saya juga membuat kolom itu dapat diubah ukurannya.

reactable (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE,

kolom = daftar (

Resource = colDef (html = TRUE, resizable = TRUE)

)

)

Untuk memberitahu reactable untuk tidak menampilkan kolom Komentar di tabel utama, saya mengatur colDef(show = FALSE).

reactable (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE,

kolom = daftar (

Resource = colDef (html = TRUE, resizable = TRUE),

Komentar = colDef (show = FALSE)

)

)

Sejauh ini bagus.

Sharon Machlis,

Tambahkan kode yang dapat bereaksi untuk baris yang dapat diperluas

Langkah selanjutnya adalah menambahkan baris yang dapat diperluas, dan itu sedikit lebih rumit:

# Fungsi yang dibutuhkan menurut Greg Lin, pencipta reactable

html <- function (x, inline = FALSE) {

container <- if (inline) htmltools :: span else htmltools :: div

container (hazardouslySetInnerHTML = list ("__ html" = x))

}

reactable (nicar, searchable = TRUE, showSortable = TRUE,

kolom = daftar (

Resource = colDef (html = TRUE, resizable = TRUE),

Komentar = colDef (show = FALSE)

),

# jika ada komentar, buat baris bisa diperluas

details = function (index) {

if (nicar $ Comments [index]! = "") {

htmltools :: tagList (

html (nicar $ Comments [index])

)

}

}

)

Saya tidak menulis bagian ini sendiri; pencipta yang dapat bereaksi, Greg Lin, menulisnya. Sejujurnya, saya tidak mengerti apa yang dilakukan setiap baris. Tapi itu berhasil! 

Sharon Machlis

Akankah saya mengingat kode ini saat berikutnya saya ingin membuat tabel dengan baris yang dapat diperluas? Tidak. Jelas tidak. Tetapi jika saya membuat cuplikan kode RStudio , saya tidak perlu mengingatnya. Ini akan selalu hanya dengan beberapa kali menekan tombol.

Jika Anda sama sekali tidak terbiasa dengan cuplikan kode RStudio, lihat episode Do More With R pada cuplikan kode untuk penjelasan lengkap . Tapi inilah dasar-dasarnya.  

Buat cuplikan kode RStudio

Di bawah ini adalah gambar kode tabel saya yang menyoroti variabel untuk bingkai data dan nama kolom saya, serta mengubah definisi kolom dari notasi tanda dolar menjadi notasi braket (yang bekerja jauh lebih baik dalam cuplikan). Juga - sangat penting - saya menambahkan judul cuplikan dan menjorokkan setiap baris kode dengan tab awal. Itu suatu keharusan!

Sharon Machlis,

Kemudian saya hanya perlu mengubah setiap nama variabel menjadi variabel cuplikan umum : 1 untuk bingkai data, 2 untuk kolom yang ingin saya tampilkan sebagai HTML, dan 3 untuk kolom baris yang dapat diperluas. Catatan variabel sintaks: ${number:variable_name}. Variabel ini akan memudahkan saya untuk mengisi kembali nama variabel sebenarnya di RStudio. 

cuplikan my_expandable_row

html <- function (x, inline = FALSE) {

container <- if (inline) htmltools :: span else htmltools :: div

container (hazardouslySetInnerHTML = list ("__ html" = x))

}

reactable ($ {1: mydf}, searchable = TRUE, showSortable = TRUE,

kolom = daftar (

$ {2: html_column} = colDef (html = TRUE, resizable = TRUE),

$ {3: expand_col} = colDef (tampilkan = FALSE)

),

details = function (index) {

if ($ {1: mydf} [['$ {3: expand_col}']] [index]! = "") {

htmltools :: tagList (

html ($ {1: mydf} [['$ {3: expand_col}']] [indeks])

)

}

}

)

Anda dapat menyalin dan menempelkan kode cuplikan di atas ke dalam file cuplikan RStudio Anda sendiri menggunakan

usethis :: edit_rstudio_snippets ()

untuk membuka file cuplikan di RStudio. Pastikan kutipan kode cuplikan adalah tanda kutip biasa dan setiap baris diberi indentasi dengan tab (bukan hanya spasi; tab awal untuk setiap baris kode wajib diisi).

Sekarang jika Anda mengetik nama cuplikan dalam file skrip RStudio sumber R, itu akan meluas untuk memberi Anda kodenya. Anda kemudian dapat mengetik nama variabel pertama, tekan tab, ketik nama variabel kedua Anda, dan seterusnya. Lihat video yang disematkan dalam artikel ini untuk melihat cara kerjanya. Dan nikmati tabel interaktif Anda sendiri dengan baris yang dapat diperluas!

Untuk tips R selengkapnya, buka halaman Lakukan Lebih Banyak Dengan R.