Programiranje

Kako ustvariti tabele v R z razširljivimi vrsticami

Interaktivne tabele z iskanjem in razvrščanjem so lahko dober način raziskovanja podatkov. Včasih boste morda želeli te podatke deliti z drugimi, vključno s podatki, ki vsebujejo samo besedilo, kot je seznam video vadnic Naredi več z R.

Če pa ti podatki vključujejo stolpec s precej dolgimi vnosi, se ta stolpec morda ne prilega tabeli s širino zaslona. To je lahko še posebej težavno, če vsaka vrstica ne vključuje zelo širokega stolpca. Na primer tabela rezultatov vprašalnika, kjer je eno polje »Ali imate dodatne komentarje?« Ne smejo vsi.

Tam lahko miza z razširljivimi vrsticami pride prav. Na konferenci podatkovnega novinarstva NICAR v začetku tega leta sem objavil obrazec, da so lahko govorci (in drugi udeleženci) oddali povezave do predstavitev sej. Nekateri so dodali dodatne komentarje; drugi ne. Privzeti prikaz tega stolpca bi zapravil veliko nepremičnin na zaslonu.

Namesto tega se to polje za komentar prikaže v moji interaktivni tabeli virov NICAR le, če uporabnik klikne ikono razširitvene vrstice. Vsake vrstice ni mogoče razširiti z ikono, ki jo je mogoče klikniti na levi strani imena teme, ker vsaka vrstica nima podatkov v tem polju, kot lahko (upamo) vidite na spodnjem posnetku zaslona.

Sharon Machlis,

Poglejmo, kako narediti takšno mizo.

Če želite nadaljevati, namestite in naložite reaktivni paket. Za to predstavitev boste potrebovali tudi nameščene pakete rio, lepilo, htmltools in dplyr.

Podatke, ki jih bom uporabil v tej predstavitvi, lahko prenesete s spodnje povezave. Gre za majhen (15 vrstic) nabor podatkov o R in Python seje na letošnji konferenci NICAR.

prenesi Naredite več z R Demo naborom podatkov za tabele z razširljivimi vrsticami 15 vrstic informacij o sejah R in Python na konferenci podatkovnega novinarstva NICAR 2020 Sharon Machlis

Naložite reaktiven in dplyr v R

V spodnjo kodo naložim reaktiven in dplyr ter nato s pomočjo uvozim svoje podatke rio :: import ()

knjižnica (odzivna)

knjižnica (dplyr)

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

Podatki imajo stolpce za ime vira (Kaj), avtorja (Kdo), TheURL, Oznake, Vrsta in Komentarji.

Nato želim ustvariti nov stolpec z imenom Vir s povezavo do vsakega vira, ki jo je mogoče klikniti. Z uporabo stolpcev What in TheURL pišem samo osnovni HTML, da uporabnikom olajšam dostop do virov, prikazanih v tabeli.

Nato izberem želene stolpce v vrstnem redu, kot jih želim.

nicar%

mutiraj (

Vir = lepilo :: lepilo ("{Kaj}")

) %>%

izberite (Vir, Kdo, Oznake, Vrsta, Komentarji)

Začnite z osnovno reaktivno mizo

Na koncu ustvarim osnovno, privzeto odzivno tabelo.

reaktiven (nicar)

In ta tabela je osnovna. Iskalnega polja še ni, stolpec Vir pa prikazuje dejanska koda HTML namesto prikaza kot HTML

Sharon Machlis,

V naslednji skupini kod dodam iskalno polje v tabelo in ikone puščic, ki kažejo, da je stolpce mogoče razvrstiti.

odziven (nicar, iskati = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Da povem, da je reaktiven prikaz stolpca z viri kot HTML, uporabim argument stolpci in seznam, kjer colDef nastavi atribute enega ali več stolpcev. Spodaj nastavljam html = res za stolpec Resource, tako da se prikaže kot HTML, in tudi ta stolpec spremenim.

odziven (nicar, iskati = TRUE, showSortable = TRUE, showSortIcon = TRUE,

stolpci = seznam (

Vir = colDef (html = TRUE, spremenljiv = TRUE)

)

)

Da bom rekel, da se reaktivni ne prikažejo stolpca Komentarji v glavni tabeli, sem nastavil colDef (show = FALSE).

odziven (nicar, iskalno = TRUE, showSortable = TRUE, showSortIcon = TRUE,

stolpci = seznam (

Vir = colDef (html = TRUE, spremenljiv = TRUE),

Komentarji = colDef (show = FALSE)

)

)

Zaenkrat dobro.

Sharon Machlis,

Dodajte odzivno kodo za razširljive vrstice

Naslednji korak je dodajanje razširljivih vrstic in to je nekoliko bolj zapleteno:

# Funkcija je potrebna po mnenju Grega Lina, ustvarjalca reaktivnih

html <- funkcija (x, vrstica = FALSE) {

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

vsebnik (nevarnoSetInnerHTML = seznam ("__ html" = x))

}

odziven (nicar, iskati = TRUE, showSortable = TRUE,

stolpci = seznam (

Vir = colDef (html = TRUE, spremenljiv = TRUE),

Komentarji = colDef (show = FALSE)

),

# če obstaja komentar, naredite vrstico razširljivo

podrobnosti = funkcija (indeks) {

if (nicar $ Komentarji [indeks]! = "") {

htmltools :: tagList (

html (nicar $ komentarji [indeks])

)

}

}

)

Tega dela nisem napisal sam; odziven ustvarjalec Greg Lin ga je napisal. Iskreno, ne razumem, kaj počne vsaka vrstica. Ampak deluje!

Sharon Machlis

Ali si bom to kodo zapomnil naslednjič, ko želim narediti tabelo z razširljivimi vrsticami? Ne. Vsekakor ne. Ampak, če naredim Delček kode RStudio, Jaz ne imeti da se ga spomnimo. Vedno bo oddaljen le nekaj pritiskov tipk.

Če delčkov kode RStudio sploh ne poznate, si oglejte epizodo Naredite več z R na delčkih kode za popolno razlago. Tu pa so osnove.

Naredite odrezek kode RStudio

Spodaj je slika moje kode tabele, ki poudarja spremenljivke za moji podatkovni okvir in imena stolpcev, kot tudi spreminjanje definicije stolpca iz dolarskega zapisa v zapis oklepajev (kar je veliko boljše pri delčkih). Prav tako - zelo pomembno - dodal sem naslov delčka in zamaknil vsako vrstico kode z začetnim zavihkom. To je nujno!

Sharon Machlis,

Potem moram samo spremeniti vsako ime spremenljivke v generično delček spremenljivke: 1 za podatkovni okvir, 2 za stolpec, ki ga želim prikazati kot HTML, in 3 za stolpec z razširljivo vrstico. Upoštevajte sintakso spremenljivke: $ {število: ime_premenljivke}. Te spremenljivke mi bodo olajšale vnašanje dejanskih imen spremenljivk nazaj v RStudio.

odrezek my_expandable_row

html <- funkcija (x, vrstica = FALSE) {

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

vsebnik (nevarnoSetInnerHTML = seznam ("__ html" = x))

}

odziven ($ {1: mydf}, iskanje = TRUE, showSortable = TRUE,

stolpci = seznam (

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

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

),

podrobnosti = funkcija (indeks) {

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

htmltools :: tagList (

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

)

}

}

)

Zgornjo kodo delčka lahko kopirate in prilepite v svojo datoteko z delčki RStudio z uporabo

usethis :: edit_rstudio_snippets ()

, da odprete datoteko delčkov v RStudio. Prepričajte se, da so narekovaji kode delčka navadne narekovaje in da je vsaka vrstica zamaknjena z zavihkom (ne le presledki; začetni zavihek za vsako vrstico kode je obvezen).

Zdaj, če vtipkate ime delčka v skriptno datoteko RStudio source R, se mora razširiti, da vam bo dal kodo. Nato lahko vnesete ime prve spremenljivke, pritisnete zavihek, vnesete ime druge spremenljivke itd. Oglejte si video, vdelan v ta članek, da vidite, kako to deluje. In uživajte v svojih interaktivnih mizah z razširljivimi vrsticami!

Za več nasvetov R pojdite na stran Naredite več z R.

$config[zx-auto] not found$config[zx-overlay] not found