Programovanie

Ako vytvárať tabuľky v R s rozbaliteľnými riadkami

Príjemným spôsobom ako preskúmať údaje môžu byť interaktívne tabuľky s vyhľadávaním a triedením. Tieto údaje možno budete niekedy chcieť zdieľať s inými ľuďmi - vrátane iba textových údajov, ako je napríklad zoznam videonávodov Do More With R.

Ak však tieto údaje obsahujú stĺpec s pomerne dlhými záznamami, tento stĺpec sa nemusí dobre hodiť do tabuľky na šírku vašej obrazovky. To môže byť obzvlášť zložité, keď nie každý riadok obsahuje veľmi široký stĺpec. Napríklad tabuľka s výsledkami dotazníka, kde jedno pole je „Máte nejaké ďalšie komentáre?“ Nie každý môže.

Tam sa môže hodiť tabuľka s rozbaliteľnými riadkami. Na konferencii dátovej žurnalistiky NICAR začiatkom tohto roka som zverejnil formulár, aby rečníci (a ďalší účastníci) mohli odosielať odkazy na prezentácie relácie. Niektorí ľudia pridali ďalšie komentáre; iné nie. Zobrazenie tohto stĺpca v predvolenom nastavení by spôsobilo stratu veľkého množstva nehnuteľností na obrazovke.

Namiesto toho sa toto pole pre komentár zobrazí v mojej interaktívnej tabuľke zdrojov NICAR, iba ak používateľ klikne na ikonu rozbaleného riadku. Nie každý riadok je možné rozšíriť kliknutím na ikonu vľavo od názvu témy, pretože nie každý riadok obsahuje údaje v tomto poli, ako môžete (dúfajme) vidieť na nasledujúcom obrázku.

Sharon Machlis,

Pozrime sa, ako vyrobiť takúto tabuľku.

Ak chcete pokračovať, nainštalujte a načítajte reaktívny balík. Pre túto ukážku budete tiež potrebovať nainštalované balíčky rio, lepidlo, htmltools a dplyr.

Údaje, ktoré v tejto ukážke použijem, si môžete stiahnuť z odkazu nižšie. Je to malá (15 riadkov) množina údajov o R. a Stretnutia Pythonu na tohtoročnej konferencii NICAR.

stiahnite si Urobte viac pomocou demo dátovej sady R pre tabuľky s rozšíriteľnými riadkami 15 riadkov informácií o reláciách R a Python na konferencii dátovej žurnalistiky NICAR v roku 2020 Sharon Machlis

Vložte zaťažiteľné a dplyr do R

V nižšie uvedenom kóde načítam reaktabilné a dplyr a potom importujem svoje údaje pomocou rio :: import ()

knižnica (reaktívna)

knižnica (dplyr)

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

Dáta obsahujú stĺpce s názvom zdroja (Čo), autorom (Kto), TheURL, Značky, Typ a Komentáre.

Ďalej chcem vytvoriť nový stĺpec s názvom Zdroj s odkazom na každý zdroj, na ktorý je možné kliknúť. Píšem len základné HTML pomocou stĺpcov What a TheURL, aby som používateľom uľahčil prístup k zdrojom zobrazeným v tabuľke.

Potom vyberiem stĺpce, ktoré chcem, v poradí, v akom ich chcem mať.

nikar%

mutovať(

Zdroj = lepidlo :: lepidlo („{What}“)

) %>%

vyberte (Zdroj, Kto, Značky, Typ, Komentáre)

Začnite základnou reagovateľnou tabuľkou

Nakoniec vytvorím základnú predvolenú reaktívnu tabuľku.

reaktívny (nikar)

A táto tabuľka je základná. Zatiaľ neexistuje žiadne vyhľadávacie pole a v stĺpci Zdroj sa zobrazuje skutočný HTML kód namiesto zobrazenia ako HTML

Sharon Machlis,

V ďalšej skupine kódov pridám do tabuľky vyhľadávacie pole a malé ikony šípok, ktoré ukazujú, že stĺpce sú zoradené.

reaktívny (nikar, prehľadateľný = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Aby som zistil, že je reaktívne, aby sa stĺpec Zdroj zobrazil ako HTML, použijem argument stĺpcov a zoznam, kde colDef nastavuje atribúty jedného alebo viacerých stĺpcov. Nižšie nastavujem html = pravda pre stĺpec Zdroj, takže sa zobrazuje ako HTML, a tiež umožňujem zmenu veľkosti tohto stĺpca.

reaktívny (nikar, prehľadateľný = TRUE, showSortable = TRUE, showSortIcon = TRUE,

stĺpce = zoznam (

Zdroj = colDef (html = TRUE, zmena veľkosti = TRUE)

)

)

Nastavil som, aby som reagoval, že sa nemá zobrazovať stĺpec Komentáre v hlavnej tabuľke colDef (show = FALSE).

reaktívny (nikar, prehľadateľný = TRUE, showSortable = TRUE, showSortIcon = TRUE,

stĺpce = zoznam (

Zdroj = colDef (html = PRAVDA, zmena veľkosti = PRAVDA),

Komentáre = colDef (show = FALSE)

)

)

Zatiaľ je všetko dobré.

Sharon Machlis,

Pridajte reaktívny kód pre rozbaliteľné riadky

Ďalším krokom je pridanie rozbaliteľných riadkov, a to je o niečo zložitejšie:

# Podľa Grega Lina, tvorcu reaktívnych látok, je funkcia potrebná

html <- funkcia (x, vložený = FALSE) {

kontajner <- if (vložený) htmltools :: span else htmltools :: div

kontajner (dangerfullySetInnerHTML = list ("__ html" = x))

}

reaktívny (nikar, prehľadateľný = TRUE, showSortable = TRUE,

stĺpce = zoznam (

Zdroj = colDef (html = PRAVDA, zmena veľkosti = PRAVDA),

Komentáre = colDef (show = FALSE)

),

# ak existuje komentár, urobte riadok rozbaliteľným

details = function (index) {

if (nicar $ Komentáre [index]! = "") {

htmltools :: tagList (

html (nicar $ Komentáre [index])

)

}

}

)

Nenapísal som túto časť sám; napísal to reaktívny tvorca Greg Lin. Úprimne, nerozumiem, čo robí každý riadok. Ale funguje to!

Sharon Machlis

Pamätám si tento kód, keď nabudúce budem chcieť vytvoriť tabuľku s rozbaliteľnými riadkami? Nie, určite nie. Ale ak urobím Fragment kódu RStudio„Ja nie mať pamätať si to. Vždy to bude len pár stlačených klávesov.

Ak vôbec nepoznáte útržky kódu RStudio, pozrite si epizódu Urobte viac s R na úryvkoch kódu, kde nájdete úplné vysvetlenie.. Ale tu sú základy.

Vytvorte útržok kódu RStudio

Nižšie je obrázok môjho tabuľkového kódu, ktorý zvýrazňuje premenné mojich dátových rámcov a názvov stĺpcov, ako aj zmenu definície stĺpca z notácie znak dolára na notáciu v zátvorkách (čo v úryvkoch funguje oveľa lepšie). Tiež - veľmi dôležité - som pridal nadpis úryvku a každý riadok kódu odsadil pomocou začiatočnej karty. To je nevyhnutnosť!

Sharon Machlis,

Potom už stačí len zmeniť názov každej premennej na všeobecný premenná úryvku: 1 pre dátový rámec, 2 pre stĺpec, ktorý chcem zobraziť ako HTML, a 3 pre stĺpec s rozbaliteľným riadkom. Všimnite si syntax premennej: $ {number: variable_name}. Tieto premenné mi uľahčia vyplnenie skutočných názvov premenných späť v programe RStudio.

úryvok my_expandable_row

html <- funkcia (x, vložený = FALSE) {

kontajner <- if (vložený) htmltools :: span else htmltools :: div

kontajner (dangerfullySetInnerHTML = list ("__ html" = x))

}

reaktívne ($ {1: mydf}, vyhľadateľné = TRUE, showSortable = TRUE,

stĺpce = zoznam (

$ {2: html_column} = colDef (html = TRUE, zmena veľkosti = TRUE),

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

),

details = function (index) {

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

htmltools :: tagList (

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

)

}

}

)

Vyššie uvedený úryvok môžete skopírovať a vložiť do svojho vlastného súboru úryvkov RStudio pomocou

usethis :: edit_rstudio_snippets ()

otvoriť súbor úryvkov v RStudio. Uistite sa, že úvodzovky kódu úryvku sú obyčajné úvodzovky a že každý riadok je odsadený tabulátorom (nielen medzerami; úvodná karta pre každý riadok kódu je povinná).

Ak teraz napíšete názov úryvku do súboru skriptu R zdroja RStudio, mal by sa rozšíriť, aby vám poskytol kód. Potom môžete napísať názov prvej premennej, kliknúť na kartu, napísať názov druhej premennej atď. Ako to funguje, pozrite sa na video vložené v tomto článku. A užite si svoje vlastné interaktívne tabuľky s rozšíriteľnými riadkami!

Ďalšie tipy pre R nájdete na stránke Robte viac s R.

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