Ohjelmointi

Kuinka luoda taulukoita R: ssä laajennettavilla riveillä

Interaktiiviset taulukot, joissa on haku ja lajittelu, voivat olla hieno tapa tutkia tietoja. Joskus saatat haluta jakaa nämä tiedot muiden ihmisten kanssa - mukaan lukien vain tekstitiedot, kuten luettelo Do More With R -video-oppaista.

Mutta kun nämä tiedot sisältävät sarakkeen, jossa on melko pitkiä merkintöjä, kyseinen sarake ei välttämättä sovi hyvin näytön leveydelle. Tämä voi olla erityisen hankalaa, kun jokainen rivi ei sisällä hyvin leveää saraketta. Esimerkiksi kyselylomaketaulukko, jossa yksi kenttä on "Onko sinulla lisää kommentteja?" Kaikki eivät voi.

Siellä voi olla kätevä taulukko, jossa on laajennettavissa olevat rivit. Aiemmin tänä vuonna NICAR-tietojenkäsittelykonferenssissa lähetin lomakkeen, jotta puhujat (ja muut osallistujat) voisivat lähettää linkkejä istunnon esityksiin. Jotkut ihmiset lisäsivät kommentteja; toiset eivät. Tämän sarakkeen näyttäminen oletusarvoisesti vie paljon näytön kiinteistöjä.

Sen sijaan kyseinen kommenttikenttä näkyy interaktiivisessa NICAR-resurssien taulukossa vain, jos käyttäjä napsauttaa laajennusrivikuvaketta. Kaikkia rivejä ei voi laajentaa napsautettavalla kuvakkeella Aiheen nimen vasemmalla puolella, koska kaikilla riveillä ei ole tietoja kyseisessä kentässä, kuten voit (toivottavasti) nähdä alla olevasta kuvakaappauksesta.

Sharon Machlis,

Katsotaanpa, kuinka tehdä tällainen pöytä.

Jos haluat seurata mukana, asenna ja lataa reagoiva paketti. Tätä esittelyä varten tarvitset myös asennetut rio-, liima-, htmltools- ja dplyr-paketit.

Voit ladata tiedot, joita käytän tässä esittelyssä, alla olevasta linkistä. Se on pieni (15 riviä) datajoukko R: stä ja Python-istunnot tämän vuoden NICAR-konferenssissa.

lataa Tee enemmän R-esittelytietojoukolla laajennettavilla riveillä varustetuille taulukoille 15 riviä tietoa R- ja Python-istunnoista NICAR-tietojenkäsittelykonferenssissa Sharon Machlis 2020

Lataa reaktiivinen ja hajoava R: ssä

Alla olevassa koodissa ladaan reagoivat ja dplyr ja tuon sitten tietoni käyttäen rio :: tuonti ()

kirjasto (reagoiva)

kirjasto (dplyr)

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

Aineisto sisältää sarakkeet resurssin nimelle (Mikä), kirjoittajalle (Kuka), TheURL, Tunnisteet, Tyyppi ja Kommentit.

Seuraavaksi haluan luoda uuden sarakkeen nimeltä Resurssi, jossa on napsautettava linkki kuhunkin resurssiin. Kirjoitan vain vähän HTML-koodin perustietoja Mitä ja TheURL -sarakkeilla, jotta käyttäjien on helpompi päästä taulukkoon näkyviin resursseihin.

Sitten valitsen haluamasi sarakkeet haluamassani järjestyksessä.

nicar%

muuttua(

Resurssi = liima :: liima ("{Mitä}")

) %>%

valitse (Resurssi, Kuka, Tunnisteet, Tyyppi, Kommentit)

Aloita reagoivasta taulukosta

Lopuksi luon perustason, oletusarvoisesti reagoivan taulukon.

reagoiva (nicar)

Ja tämä taulukko on perustiedot. Hakukenttää ei ole vielä ja Resurssi-sarake näyttää todellinen HTML-koodi näyttämisen sijaan HTML-muodossa

Sharon Machlis,

Seuraavaan koodiryhmään lisätään hakukenttä taulukkoon ja pienet nuolikuvakkeet, jotka osoittavat, että sarakkeet ovat lajiteltavissa.

reagoiva (nicar, haettavissa = TOSI, showSortable = TOSI, showSortIcon = TOSI)

Jotta voin kertoa, että Resurssi-sarake voidaan näyttää HTML-muodossa, käytän sarakkeiden argumenttia ja luetteloa, jossa colDef asettaa yhden tai useamman sarakkeen attribuutit. Alla asetan html = true Resurssi -sarakkeelle, jotta se näkyy HTML-muodossa, ja teen myös sarakkeen kokoa.

reagoiva (nicar, haettavissa = TOSI, showSortable = TOSI, showSortIcon = TOSI,

sarakkeet = luettelo (

Resurssi = colDef (html = TOSI, kokoa mitattava = TOSI)

)

)

Asetin, jotta voin kertoa reagoivalle, ettet näytä Kommentit-saraketta päätaulukossa colDef (näytä = EPÄTOSI).

reagoiva (nicar, haettavissa = TOSI, showSortable = TOSI, showSortIcon = TOSI,

sarakkeet = luettelo (

Resurssi = colDef (html = TOSI, muutettavissa oleva = TOSI),

Kommentit = colDef (näytä = EPÄTOSI)

)

)

Toistaiseksi niin hyvä.

Sharon Machlis,

Lisää reagoivaa koodia laajennettaville riveille

Seuraava vaihe on laajennettavien rivien lisääminen, ja se on hieman monimutkaisempi:

# Toiminto vaaditaan reagoivien tekijöiden Greg Linin mukaan

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

säiliö <- if (inline) htmltools :: span else htmltools :: div

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

}

reagoiva (nicar, haettavissa = TOSI, showSortable = TOSI,

sarakkeet = luettelo (

Resurssi = colDef (html = TOSI, muutettavissa oleva = TOSI),

Kommentit = colDef (näytä = EPÄTOSI)

),

# jos kommentti on olemassa, tee rivi laajennettavissa

yksityiskohdat = funktio (hakemisto) {

if (nicar $ Kommentit [hakemisto]! = "") {

htmltools :: tagList (

html (nicar $ Kommentit [hakemisto])

)

}

}

)

En itse kirjoittanut tätä osaa; reagoiva luoja Greg Lin kirjoitti sen. Rehellisesti, en ymmärrä, mitä jokainen rivi tekee. Mutta se toimii!

Sharon Machlis

Muistanko tämän koodin seuraavan kerran, kun haluan tehdä taulukon laajennettavilla riveillä? Ei. Ehdottomasti ei. Mutta jos teen RStudio-koodinpätkä, Minä en omistaa muistaa se. Se on aina vain muutaman näppäimen painalluksen päässä.

Jos et ole lainkaan perehtynyt RStudio-koodinpätkiin, tutustu täydelliseen selitykseen Do More With R -jaksolla koodinpätkissä. Mutta tässä on perusasiat.

Tee RStudio-koodinpätkä

Alla on kuva taulukon koodistani, joka korostaa tietokehyksen ja sarakkeiden nimien muuttujia sekä muuttaa sarakemäärittelyä dollarin merkinnästä sulkuihin (mikä toimii paljon paremmin katkelmissa). Myös - erittäin tärkeää - lisäsin koodinpätkän otsikon ja sisennin jokaisen koodirivin aloitusvälilehdellä. Se on pakko!

Sharon Machlis,

Sitten minun täytyy vain muuttaa jokainen muuttujan nimi yleisnimeksi katkelmamuuttuja: 1 datakehykselle, 2 sarakkeelle, jonka haluan näyttää HTML-muodossa, ja 3 laajennettavan rivin sarakkeelle. Huomaa muuttujan syntakse: $ {numero: muuttujan_nimi}. Näiden muuttujien avulla minun on helppo täyttää todelliset muuttujien nimet takaisin RStudioon.

katkelma my_expandable_row

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

säiliö <- if (inline) htmltools :: span else htmltools :: div

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

}

reagoiva ($ {1: mydf}, haettavissa = TOSI, showSortable = TOSI,

sarakkeet = luettelo (

$ {2: html_column} = colDef (html = TOSI, muutettavissa oleva koko = TOSI),

$ {3: expand_col} = colDef (näytä = EPÄTOSI)

),

yksityiskohdat = funktio (hakemisto) {

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

htmltools :: tagList (

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

)

}

}

)

Voit kopioida ja liittää yllä olevan koodinpätkäkoodin omaan RStudio-katkelmasi tiedostoon

usethis :: edit_rstudio_snippets ()

avata katkelmatiedosto RStudiossa. Varmista, että koodinpätkäkoodin lainaukset ovat tavallisia lainausmerkkejä ja että jokainen rivi on sisennetty sarkaimella (ei vain välilyönteillä; jokaisen koodirivin aloitusvälilehti on pakollinen).

Jos kirjoitat nyt koodinpätkän nimen RStudio source R -komentotiedostoon, sen pitäisi laajentua antamaan sinulle koodi. Voit sitten kirjoittaa ensimmäisen muuttujan nimen, napsauttaa välilehteä, kirjoittaa toisen muuttujan nimen ja niin edelleen. Katso tästä artikkelista upotettu video nähdäksesi, miten tämä toimii. Ja nauti omista interaktiivisista pöydistäsi laajennettavilla riveillä!

Saat lisää R-vinkkejä siirtymällä Tee enemmän R: llä -sivulle.