Programování

Jak vytvořit tabulky v R s rozbalitelnými řádky

Interaktivní tabulky s vyhledáváním a tříděním mohou být příjemným způsobem, jak prozkoumat data. Někdy možná budete chtít tato data sdílet s dalšími lidmi - včetně textových dat, jako je seznam video tutoriálů Do More With R.

Pokud ale tato data obsahují sloupec s poměrně dlouhými položkami, nemusí se tento sloupec dobře hodit do tabulky na šířku vaší obrazovky. To může být obzvláště obtížné, když ne každý řádek obsahuje velmi široký sloupec. Například tabulka výsledků dotazníku, kde jedno pole je „Máte nějaké další komentáře?“ Ne každý může.

Tam se může hodit tabulka s roztažitelnými řádky. Na konferenci datové žurnalistiky NICAR na začátku tohoto roku jsem zveřejnil formulář, aby přednášející (a další účastníci) mohli odesílat odkazy na prezentace relací. Někteří lidé přidali další komentáře; ostatní ne. Zobrazení tohoto sloupce ve výchozím nastavení by plýtvalo spoustou nemovitostí na obrazovce.

Místo toho se toto pole komentáře zobrazí v mé interaktivní tabulce zdrojů NICAR pouze v případě, že uživatel klikne na ikonu rozbaleného řádku. Ne každý řádek lze rozbalit pomocí klikací ikony vlevo od názvu tématu, protože ne každý řádek má v tomto poli data, jak můžete (doufejme) vidět na následujícím obrázku.

Sharon Machlis,

Podívejme se, jak vyrobit takový stůl.

Chcete-li pokračovat, nainstalujte a načtěte reaktivní balíček. U této ukázky budete také potřebovat nainstalované balíčky rio, lepidlo, htmltools a dplyr.

Údaje, které v této ukázce použiji, si můžete stáhnout z níže uvedeného odkazu. Je to malá (15 řádků) datová sada o R. a Sezení v Pythonu na letošní konferenci NICAR.

stáhnout Udělejte více s ukázkovou datovou sadou R pro tabulky s rozšiřitelnými řádky 15 řádků informací o relacích R a Pythonu na konferenci datové žurnalistiky NICAR 2020 Sharon Machlis

Vložte reaktivní a dplyr do R

V níže uvedeném kódu načtu reaktabilní a dplyr a poté importuji svá data pomocí rio :: import ()

knihovna (reaktivní)

knihovna (dplyr)

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

Data mají sloupce pro název zdroje (Co), autora (Kdo), TheURL, Značky, Typ a Komentáře.

Dále chci vytvořit nový sloupec s názvem Zdroj s klikatelným odkazem na každý zdroj. Právě píšu trochu základního HTML pomocí sloupců What a TheURL, aby se uživatelé snáze dostali ke zdrojům zobrazeným v tabulce.

Poté vyberu sloupce, které chci, v pořadí, v jakém je chci.

% nikar

mutovat(

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

) %>%

vyberte (Zdroj, Kdo, Značky, Typ, Komentáře)

Začněte základní reaktivní tabulkou

Nakonec vytvořím základní, výchozí reaktivní tabulku.

reaktivní (nikar)

A tato tabulka je základní. Zatím neexistuje žádné vyhledávací pole a ve sloupci Zdroj se zobrazuje skutečný HTML kód místo zobrazení jako HTML

Sharon Machlis,

V další skupině kódů přidám do tabulky vyhledávací pole a malé ikony šipek ukazující, že sloupce jsou seřazeny.

reaktivní (nicar, prohledávatelné = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Abych řekl reaktivní, aby se sloupec Zdroj zobrazil jako HTML, používám argument sloupce a seznam, kde colDef nastavuje atributy jednoho nebo více sloupců. Níže nastavuji html = true pro sloupec Zdroj, takže se zobrazuje jako HTML, a já také dělám změnu velikosti tohoto sloupce.

reaktivní (nicar, prohledávatelné = TRUE, showSortable = TRUE, showSortIcon = TRUE,

sloupce = seznam (

Zdroj = colDef (html = PRAVDA, změna velikosti = PRAVDA)

)

)

Nastavil jsem, aby bylo možné reagovat, aby se sloupec Komentáře nezobrazoval v hlavní tabulce colDef (show = FALSE).

reaktivní (nicar, prohledávatelné = TRUE, showSortable = TRUE, showSortIcon = TRUE,

sloupce = seznam (

Zdroj = colDef (html = PRAVDA, změna velikosti = PRAVDA),

Komentáře = colDef (show = FALSE)

)

)

Zatím je vše dobré.

Sharon Machlis,

Přidejte reaktivní kód pro rozbalitelné řádky

Dalším krokem je přidání rozbalitelných řádků, a to je o něco složitější:

# Podle Grega Lina, tvůrce reaktivních, je funkce nutná

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

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

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

}

reaktivní (nicar, prohledávatelné = TRUE, showSortable = TRUE,

sloupce = seznam (

Zdroj = colDef (html = PRAVDA, změna velikosti = PRAVDA),

Komentáře = colDef (show = FALSE)

),

# pokud existuje komentář, zvětšete řádek

details = funkce (index) {

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

htmltools :: tagList (

html (nicar $ Komentáře [index])

)

}

}

)

Tuto část jsem nenapsal sám; Reagovatelný tvůrce Greg Lin to napsal. Upřímně, nechápu, co dělá každý řádek. Ale funguje to!

Sharon Machlis

Zapamatuji si tento kód, až příště budu chtít vytvořit tabulku s rozbalitelnými řádky? Ne, rozhodně ne. Ale pokud udělám Fragment kódu RStudio, Já ne mít pamatovat si to. Vždy to bude jen pár stisknutí kláves.

Pokud vůbec nejste obeznámeni s úryvky kódu RStudio, podívejte se na epizodu Udělejte více s R na úryvcích kódu, kde najdete úplné vysvětlení. Ale tady jsou základy.

Vytvořte fragment kódu RStudio

Níže je obrázek mého tabulkového kódu, který zvýrazňuje proměnné mých datových rámců a názvů sloupců, stejně jako změna definice sloupce z notace znak dolaru na notaci závorky (což ve fragmentech funguje mnohem lépe). Také - velmi důležité - přidal jsem název úryvku a odsadil každý řádek kódu pomocí počáteční karty. To je nutnost!

Sharon Machlis,

Pak stačí změnit název každé proměnné na obecný proměnná fragmentu: 1 pro datový rámec, 2 pro sloupec, který chci zobrazit jako HTML, a 3 pro sloupec s rozbalitelným řádkem. Všimněte si syntaxe proměnné: $ {number: variable_name}. Tyto proměnné mi usnadní vyplnění skutečných názvů proměnných zpět v RStudiu.

úryvek my_expandable_row

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

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

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

}

reaktivní ($ {1: mydf}, prohledávatelné = TRUE, showSortable = TRUE,

sloupce = seznam (

$ {2: html_column} = colDef (html = PRAVDA, změna velikosti = PRAVDA),

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

),

details = funkce (index) {

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

htmltools :: tagList (

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

)

}

}

)

Výše uvedený fragment kódu můžete zkopírovat a vložit do svého vlastního souboru úryvků RStudio pomocí

usethis :: edit_rstudio_snippets ()

otevřete soubor úryvků v RStudiu. Ujistěte se, že citace kódu fragmentu jsou prosté uvozovky a že každý řádek je odsazen tabulátorem (nejen mezerami; počáteční karta pro každý řádek kódu je povinná).

Pokud nyní zadáte název fragmentu do souboru skriptu zdroje RStudio source R, měl by se rozšířit, aby vám dal kód. Poté můžete zadat název první proměnné, stisknout kartu, zadat název druhé proměnné atd. Podívejte se na video vložené v tomto článku a podívejte se, jak to funguje. A užívejte si své vlastní interaktivní tabulky s rozšiřitelnými řádky!

Další tipy R najdete na stránce Udělejte více s R.

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