Programavimas

Kaip sukurti lenteles R su išplečiamomis eilėmis

Interaktyvios lentelės su paieška ir rūšiavimu gali būti puikus būdas tyrinėti duomenis. Kartais galite pasidalinti tais duomenimis su kitais žmonėmis, įskaitant tik teksto duomenis, pvz., „Do More With R“ vaizdo pamokų sąrašą.

Bet kai šiuose duomenyse yra stulpelis su gana ilgais įrašais, tas stulpelis gali netikti jūsų ekrano pločio lentelėje. Tai gali būti ypač keblu, kai ne kiekvienoje eilutėje yra labai platus stulpelis. Pavyzdžiui, klausimyno rezultatų lentelėje, kur vienas laukas yra „Ar turite papildomų komentarų?“ Ne visi gali.

Štai kur gali būti naudinga lentelė su išplečiamomis eilėmis. Šių metų pradžioje vykusioje NICAR duomenų žurnalistikos konferencijoje aš paskelbiau formą, kad pranešėjai (ir kiti dalyviai) galėtų pateikti nuorodas į sesijos pristatymus. Kai kurie žmonės pridėjo papildomų komentarų; kiti to nepadarė. Pagal numatytuosius nustatymus rodant tą stulpelį sugaištų daug ekrano nekilnojamojo turto.

Vietoj to, šis komentarų laukas mano interaktyvioje NICAR išteklių lentelėje rodomas tik tuo atveju, jei vartotojas spusteli išplėtimo eilutės piktogramą. Ne kiekviena eilutė gali būti išplėsta spustelėjus piktogramą, esančią temos pavadinimo kairėje, nes ne kiekvienoje eilutėje yra duomenų tame lauke, kaip galite (tikiuosi) pamatyti žemiau esančiame ekrano kopijoje.

Sharon Machlis,

Pažiūrėkime, kaip padaryti tokį stalą.

Jei norite sekti paskui, įdiekite ir įkelkite reaguojantį paketą. Šioje demonstracijoje taip pat reikės įdiegti „rio“, „adhesive“, „htmltools“ ir „dplyr“ paketus.

Duomenis, kuriuos naudosiu šioje demonstracinėje versijoje, galite atsisiųsti iš toliau pateiktos nuorodos. Tai nedidelis (15 eilučių) duomenų rinkinys apie R ir „Python“ sesijos šių metų NICAR konferencijoje.

atsisiųsti Daryk daugiau naudodamasis „R Demo“ duomenų rinkiniu lentelėms su išplečiamomis eilutėmis 15 eilučių informacijos apie „R“ ir „Python“ seansus 2020 m. NICAR duomenų žurnalistikos konferencijoje Sharon Machlis

Įkelkite reaktyvųjį ir dplyrį R

Žemiau esančiame kode įkeliu reaguojamą ir dplyr, tada importuoju duomenis naudodamas rio :: importas ()

biblioteka (reaguojama)

biblioteka (dplyr)

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

Duomenys turi išteklių stulpelius (kas), autorius (kas), TheURL, žymos, tipas ir komentarai.

Tada noriu sukurti naują stulpelį pavadinimu Ištekliai su spustelėjama nuoroda į kiekvieną šaltinį. Aš tiesiog rašau šiek tiek pagrindinio HTML, naudodamas stulpelius „Kas“ ir „TheURL“, kad vartotojams būtų lengviau pasiekti lentelėje rodomus išteklius.

Tada pasirenku norimus stulpelius norima tvarka.

nicar%

mutuoti(

Ištekliai = klijai :: klijai ("{What}")

) %>%

pasirinkti (šaltinis, kas, žymos, tipas, komentarai)

Pradėkite nuo pagrindinės reaktyvios lentelės

Galiausiai sukuriu pagrindinę numatytąją reaguojamąją lentelę.

reaguoja (nicar)

Ir ši lentelė yra pagrindinė. Paieškos laukelio dar nėra, o stulpelyje Ištekliai rodoma tikrasis HTML kodas užuot rodęs kaip HTML

Sharon Machlis,

Kitoje kodų grupėje prie lentelės pridedu paieškos laukelį ir mažas rodyklių piktogramas, rodančias, kad stulpeliai yra rūšiuojami.

reaguoja (nicar, ieškoma = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Norėdamas pasakyti, kad „Resource“ stulpelis būtų rodomas kaip HTML, naudoju argumentą „column“ ir sąrašą, kuriame „colDef“ nustato vieno ar daugiau stulpelių atributus. Žemiau aš nustatau html = true stulpelyje „Ištekliai“, kad jis būtų rodomas kaip HTML, ir aš taip pat padarau to stulpelio dydį.

reaguojama (nicar, ieškoma = TRUE, showSortable = TRUE, showSortIcon = TRUE,

stulpeliai = sąrašas (

Ištekliai = colDef (html = TRUE, keičiamo dydžio = TRUE)

)

)

Norėdamas pasakyti, kad pagrindinėje lentelėje nebūtų rodomas stulpelis Komentarai, nustatiau „colDef“ (rodyti = NETIESA).

reaguojama (nicar, ieškoma = TRUE, showSortable = TRUE, showSortIcon = TRUE,

stulpeliai = sąrašas (

Ištekliai = colDef (html = TRUE, keičiamo dydžio = TRUE),

Komentarai = colDef (rodyti = FALSE)

)

)

Kol kas viskas gerai.

Sharon Machlis,

Pridėkite išplečiamųjų eilučių pakeistą kodą

Kitas žingsnis yra išplėstinių eilučių pridėjimas, ir tai yra šiek tiek sudėtingiau:

# Funkcija reikalinga pagal Gregą Liną, reaguojančio kūrėją

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

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

„container“ (pavojingai „SetInnerHTML = list“ ("__ html" = x))

}

reaguojama (nicar, ieškoma = TRUE, showSortable = TRUE,

stulpeliai = sąrašas (

Ištekliai = colDef (html = TRUE, keičiamo dydžio = TRUE),

Komentarai = colDef (rodyti = FALSE)

),

# jei yra komentaras, padarykite eilutę išplečiamą

išsami informacija = funkcija (rodyklė) {

if (nicar $ Komentarai [rodyklė]! = "") {

htmltools :: tagList (

html (nicar $ komentarai [rodyklė])

)

}

}

)

Aš pats nerašiau šios dalies; reaguojantis kūrėjas Gregas Linas tai parašė. Nuoširdžiai nesuprantu, ką daro kiekviena linija. Bet tai veikia!

Sharon Machlis

Ar prisiminsiu šį kodą kitą kartą, kai norėsiu sukurti lentelę su išplečiamomis eilėmis? Ne. Tikrai ne. Bet jei aš padarau „RStudio“ kodo fragmentas, Aš ne turėti kad tai prisimintum. Tai visada bus tik už kelių klavišų paspaudimų.

Jei visiškai nesate susipažinę su „RStudio“ kodo fragmentais, išsamiai paaiškinkite „Do More With R“ epizodą kodo fragmentuose.. Bet čia yra pagrindai.

Padarykite „RStudio“ kodo fragmentą

Žemiau pateikiamas mano lentelės kodo vaizdas, išryškinantis mano duomenų rėmelių ir stulpelių pavadinimų kintamuosius, taip pat pakeičiantis stulpelio apibrėžimą iš dolerio ženklo žymėjimo į skliaustą (kuris daug geriau veikia fragmentuose). Taip pat - labai svarbu - pridėjau fragmento pavadinimą ir įtraukiau kiekvieną kodo eilutę su pradiniu skirtuku. Tai būtina!

Sharon Machlis,

Tada man tereikia pakeisti kiekvieno kintamojo pavadinimą į bendrinį fragmento kintamasis: 1 duomenų rėmui, 2 stulpeliui, kurį noriu rodyti kaip HTML, ir 3 - išplečiamųjų eilučių stulpeliui. Atkreipkite dėmesį į kintamojo sintaksę: $ {numeris: kintamas_vardas}. Šie kintamieji leis man lengvai užpildyti faktinius kintamųjų pavadinimus atgal į „RStudio“.

fragmentas my_expandable_row

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

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

„container“ (pavojingai „SetInnerHTML = list“ ("__ html" = x))

}

reaguoja ($ {1: mydf}, ieškoma = TRUE, showSortable = TRUE,

stulpeliai = sąrašas (

$ {2: html_column} = colDef (html = TRUE, keičiamo dydžio = TRUE),

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

),

išsami informacija = funkcija (rodyklė) {

jei ($ {1: mydf} [['$ {3: expand_col}']]] [rodyklė]! = "") {

htmltools :: tagList (

HTML ($ {1: mydf} [['$ {3: expand_col}']] [rodyklė])

)

}

}

)

Naudodami, galite nukopijuoti ir įklijuoti aukščiau esantį fragmento kodą į savo „RStudio“ fragmentų failą

usethis :: edit_rstudio_snippets ()

kad atidarytumėte fragmentų failą „RStudio“. Įsitikinkite, kad fragmento kodo kabutės yra paprastos kabutės ir kad kiekvienoje eilutėje yra įtrauka su skirtuku (ne tik tarpais; kiekvienos kodo eilutės pradinis skirtukas yra privalomas).

Dabar, jei įvesite fragmento pavadinimą į RStudio source R scenarijaus failą, jis turėtų išsiplėsti ir suteikti jums kodą. Tada galite įvesti pirmojo kintamojo pavadinimą, paspausti skirtuką, įvesti antrojo kintamojo pavadinimą ir pan. Peržiūrėkite šiame straipsnyje įdėtą vaizdo įrašą, kad sužinotumėte, kaip tai veikia. Ir mėgaukitės savo pačių interaktyviomis lentelėmis su išplečiamomis eilėmis!

Norėdami gauti daugiau R patarimų, eikite į puslapį „Daugiau su R“.