So erstellen Sie Tabellen in R mit erweiterbaren Zeilen

Interaktive Tabellen mit Suchen und Sortieren können eine gute Möglichkeit sein, Daten zu untersuchen. Und manchmal möchten Sie diese Daten möglicherweise mit anderen Personen teilen - einschließlich Nur-Text-Daten wie einer Liste von Do More With R-Video-Tutorials.

Wenn diese Daten jedoch eine Spalte mit ziemlich langen Einträgen enthalten, passt diese Spalte möglicherweise nicht gut in eine Tabelle mit der Breite Ihres Bildschirms. Dies kann besonders schwierig sein, wenn nicht jede Zeile die sehr breite Spalte enthält. Eine Tabelle mit Fragebogenergebnissen enthält beispielsweise das Feld "Haben Sie zusätzliche Kommentare?". Nicht jeder darf.

Hier kann eine Tabelle mit erweiterbaren Zeilen nützlich sein. Auf der NICAR-Konferenz für Datenjournalismus Anfang dieses Jahres habe ich ein Formular veröffentlicht, damit Redner (und andere Teilnehmer) Links zu Sitzungspräsentationen einreichen können. Einige Leute fügten zusätzliche Kommentare hinzu; andere nicht. Das standardmäßige Anzeigen dieser Spalte würde viel Platz auf dem Bildschirm verschwenden.

Stattdessen wird dieses Kommentarfeld in meiner interaktiven Tabelle mit NICAR-Ressourcen nur angezeigt, wenn ein Benutzer auf das Symbol zum Erweitern der Zeile klickt. Nicht jede Zeile kann mit einem anklickbaren Symbol links neben dem Themennamen erweitert werden, da nicht jede Zeile Daten in diesem Feld enthält, wie Sie (hoffentlich) im folgenden Screenshot sehen können.

Sharon Machlis,

Mal sehen, wie man so einen Tisch macht. 

Wenn Sie mitmachen möchten, installieren und laden Sie das reaktionsfähige Paket. Für diese Demo müssen außerdem die Pakete rio, glue, htmltools und dplyr installiert sein.

Sie können die Daten, die ich in dieser Demo verwenden werde, über den folgenden Link herunterladen. Es ist ein kleiner Datensatz (15 Zeilen) über R- und Python-Sitzungen auf der diesjährigen NICAR-Konferenz.

Download Mehr tun mit R Demo-Datensatz für Tabellen mit erweiterbaren Zeilen 15 Zeilen mit Informationen zu R- und Python-Sitzungen auf der NICAR-Datenjournalismuskonferenz 2020, Sharon Machlis

Last reaktiv und dplyr in R.

Im folgenden Code lade ich reaktionsfähig und dplyr und importiere dann meine Daten mit rio::import()

Bibliothek (reaktionsfähig)

Bibliothek (dplyr)

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

Die Daten enthalten Spalten für den Namen der Ressource (Was), den Autor (Wer), TheURL, Tags, Typ und Kommentare.

Als Nächstes möchte ich eine neue Spalte mit dem Namen Ressource mit einem anklickbaren Link zu jeder Ressource erstellen. Ich schreibe nur ein wenig einfaches HTML mit den Spalten What und TheURL, um Benutzern den Zugriff auf die in der Tabelle angezeigten Ressourcen zu erleichtern.

Dann wähle ich die gewünschten Spalten in der gewünschten Reihenfolge aus.

nicar%

mutieren(

Resource = glue :: glue ("{What}")

)%>%

Wählen Sie (Ressource, Wer, Tags, Typ, Kommentare)

Beginnen Sie mit einer reaktionsfähigen Basistabelle 

Schließlich erstelle ich eine einfache, standardmäßige reaktionsfähige Tabelle.

reaktionsfähig (nicar)

Und dieser Tisch ist einfach. Es gibt noch kein Suchfeld und in der Spalte Ressource wird der tatsächliche HTML-Code angezeigt, anstatt als HTML angezeigt zu werden

Sharon Machlis,

In der nächsten Codegruppe füge ich der Tabelle ein Suchfeld und kleine Pfeilsymbole hinzu, die anzeigen, dass die Spalten sortierbar sind.

reaktionsfähig (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Um Reactable anzuweisen, die Ressourcenspalte als HTML anzuzeigen, verwende ich das Spaltenargument und eine Liste, in der colDef die Attribute einer oder mehrerer Spalten festlegt. Unten html = truestelle ich die Ressourcenspalte so ein, dass sie als HTML angezeigt wird, und mache die Größe dieser Spalte auch veränderbar.

reaktionsfähig (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE,

Spalten = Liste (

Resource = colDef (html = TRUE, resizable = TRUE)

)

)

Um reaktionsfähig zu sagen, dass die Spalte "Kommentare" in der Haupttabelle nicht angezeigt werden soll, habe ich festgelegt colDef(show = FALSE).

reaktionsfähig (nicar, searchable = TRUE, showSortable = TRUE, showSortIcon = TRUE,

Spalten = Liste (

Resource = colDef (html = TRUE, resizable = TRUE),

Kommentare = colDef (show = FALSE)

)

)

So weit, ist es gut.

Sharon Machlis,

Fügen Sie reaktionsfähigen Code für erweiterbare Zeilen hinzu

Der nächste Schritt ist das Hinzufügen der erweiterbaren Zeilen, und das ist etwas komplexer:

# Funktion benötigt laut Greg Lin, Schöpfer von Reactable

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

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

Container (gefährlichSetInnerHTML = Liste ("__ html" = x))

}}

reaktionsfähig (nicar, searchable = TRUE, showSortable = TRUE,

Spalten = Liste (

Resource = colDef (html = TRUE, resizable = TRUE),

Kommentare = colDef (show = FALSE)

),

# Wenn ein Kommentar vorhanden ist, machen Sie die Zeile erweiterbar

Details = Funktion (Index) {

if (nicar $ Kommentare [index]! = "") {

htmltools :: tagList (

html (nicar $ Kommentare [Index])

)

}}

}}

)

Ich habe diesen Teil nicht selbst geschrieben; Der reaktionsfähige Schöpfer Greg Lin hat es geschrieben. Ehrlich gesagt verstehe ich nicht, was jede Zeile tut. Aber es funktioniert! 

Sharon Machlis

Erinnere ich mich an diesen Code, wenn ich das nächste Mal eine Tabelle mit erweiterbaren Zeilen erstellen möchte? Nein, definitiv nicht. Aber wenn ich einen machen RStudio Code - Schnipsel , ich weiß nicht haben , um es zu erinnern. Es ist immer nur ein paar Tastenanschläge entfernt.

Wenn Sie mit RStudio-Codefragmenten überhaupt nicht vertraut sind, finden Sie in der Do Do With With R-Episode zu Codefragmenten eine vollständige Erklärung . Aber hier sind die Grundlagen.  

Erstellen Sie ein RStudio-Code-Snippet

Unten sehen Sie ein Bild meines Tabellencodes, in dem die Variablen für meine Datenrahmen- und Spaltennamen hervorgehoben und die Spaltendefinition von der Dollarzeichen-Notation in die Klammer-Notation geändert werden (was in Snippets viel besser funktioniert). Außerdem habe ich - sehr wichtig - einen Snippet-Titel hinzugefügt und jede Codezeile mit einer Startregisterkarte eingerückt. Das ist ein Muss!

Sharon Machlis,

Dann muss ich nur noch jeden Variablennamen in eine generische Snippet-Variable ändern : 1 für den Datenrahmen, 2 für die Spalte, die ich als HTML anzeigen möchte, und 3 für die Spalte mit erweiterbaren Zeilen. Beachten Sie die Variablensyntax : ${number:variable_name}. Diese Variablen erleichtern es mir, die tatsächlichen Variablennamen wieder in RStudio einzugeben. 

Snippet my_expandable_row

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

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

Container (gefährlichSetInnerHTML = Liste ("__ html" = x))

}}

reaktionsfähig ($ {1: mydf}, durchsuchbar = WAHR, showSortable = WAHR,

Spalten = Liste (

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

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

),

Details = Funktion (Index) {

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

htmltools :: tagList (

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

)

}}

}}

)

Sie können den obigen Snippet-Code kopieren und in Ihre eigene RStudio-Snippets-Datei einfügen

usethis :: edit_rstudio_snippets ()

um die Snippets-Datei in RStudio zu öffnen. Stellen Sie sicher, dass die Snippet-Code-Anführungszeichen einfache Anführungszeichen sind und dass jede Zeile mit einem Tabulator eingerückt ist (nicht nur Leerzeichen; ein Start-Tabulator für jede Codezeile ist obligatorisch).

Wenn Sie nun den Namen des Snippets in eine RStudio-Quell-R-Skriptdatei eingeben, sollte es erweitert werden, um Ihnen den Code zu geben. Sie können dann den Namen der ersten Variablen eingeben, die Tabulatortaste drücken, den Namen Ihrer zweiten Variablen eingeben und so weiter. Schauen Sie sich das in diesem Artikel eingebettete Video an, um zu sehen, wie dies funktioniert. Und genießen Sie Ihre eigenen interaktiven Tabellen mit erweiterbaren Zeilen!

Weitere R-Tipps finden Sie auf der Seite Mehr mit R tun.