Comment créer des tableaux dans R avec des lignes extensibles

Les tableaux interactifs avec recherche et tri peuvent être un bon moyen d'explorer les données. Et parfois, vous voudrez peut-être partager ces données avec d'autres personnes, y compris des données textuelles comme une liste de didacticiels vidéo Faire plus avec R.

Mais lorsque ces données incluent une colonne avec des entrées assez longues, cette colonne peut ne pas bien s'intégrer dans un tableau de la largeur de votre écran. Cela peut être particulièrement délicat lorsque toutes les lignes n'incluent pas la colonne très large. Par exemple, un tableau des résultats du questionnaire où l'un des champs est "Avez-vous des commentaires supplémentaires?" Tout le monde ne le peut pas.

C'est là qu'une table avec des lignes extensibles peut être utile. Lors de la conférence de journalisme de données NICAR plus tôt cette année, j'ai posté un formulaire afin que les orateurs (et les autres participants) puissent soumettre des liens vers les présentations des sessions. Certaines personnes ont ajouté des commentaires supplémentaires; d'autres non. Afficher cette colonne par défaut gaspillerait beaucoup d'espace sur l'écran.

Au lieu de cela, ce champ de commentaire s'affiche dans ma table interactive des ressources NICAR uniquement si un utilisateur clique sur l'icône de développement de ligne. Toutes les lignes ne peuvent pas être développées avec une icône cliquable à gauche du nom du sujet, car toutes les lignes ne contiennent pas de données dans ce champ, comme vous pouvez (espérons-le) voir dans la capture d'écran ci-dessous.

Sharon Machlis,

Voyons comment créer une table comme celle-ci. 

Si vous souhaitez suivre, installez et chargez le package réactif. Pour cette démo, vous aurez également besoin des packages rio, glue, htmltools et dplyr installés.

Vous pouvez télécharger les données que j'utiliserai dans cette démo à partir du lien ci-dessous. Il s'agit d'un petit ensemble de données (15 lignes) sur les sessions R et Python lors de la conférence NICAR de cette année.

télécharger Do More With R Demo Data Set for Tables with Expandable Rows 15 lignes d'informations sur les sessions R et Python lors de la conférence de journalisme de données NICAR 2020 Sharon Machlis

Charger réactif et déplyr en R

Dans le code ci-dessous, je charge reactable et dplyr puis j'importe mes données en utilisant rio::import()

bibliothèque (réactif)

bibliothèque (dplyr)

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

Les données ont des colonnes pour le nom de la ressource (Quoi), l'auteur (Qui), TheURL, Tags, Type et Commentaires.

Ensuite, je veux créer une nouvelle colonne appelée Ressource avec un lien cliquable vers chaque ressource. J'écris juste un peu de HTML de base en utilisant les colonnes What et TheURL pour permettre aux utilisateurs d'accéder plus facilement aux ressources affichées dans le tableau.

Ensuite, je sélectionne les colonnes que je veux dans l'ordre dans lequel je les souhaite.

nicar%

subir une mutation(

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

)%>%

sélectionnez (Ressource, Qui, Balises, Type, Commentaires)

Commencez avec une table réactive de base 

Enfin, je crée une table réactionnelle de base par défaut.

réactif (nicar)

Et ce tableau est basique. Il n'y a pas encore de zone de recherche et la colonne Ressource affiche le code HTML réel au lieu de s'afficher au format HTML

Sharon Machlis,

Dans le groupe de codes suivant, j'ajoute une zone de recherche au tableau et de petites icônes fléchées indiquant que les colonnes sont triables.

réactif (nicar, interrogeable = TRUE, showSortable = TRUE, showSortIcon = TRUE)

Pour indiquer à reactable d'afficher la colonne Resource au format HTML, j'utilise l'argument colonnes et une liste où colDef définit les attributs d'une ou plusieurs colonnes. Ci-dessous, je configure html = truela colonne Ressource pour qu'elle s'affiche au format HTML, et je rends également cette colonne redimensionnable.

réactable (nicar, interrogeable = TRUE, showSortable = TRUE, showSortIcon = TRUE,

colonnes = liste (

Ressource = colDef (html = TRUE, redimensionnable = TRUE)

)

)

Pour dire à reactable de ne pas afficher la colonne Commentaires dans le tableau principal, j'ai défini colDef(show = FALSE).

réactable (nicar, interrogeable = TRUE, showSortable = TRUE, showSortIcon = TRUE,

colonnes = liste (

Ressource = colDef (html = TRUE, redimensionnable = TRUE),

Commentaires = colDef (show = FALSE)

)

)

Jusqu'ici tout va bien.

Sharon Machlis,

Ajouter du code réactif pour les lignes extensibles

La prochaine étape consiste à ajouter les lignes extensibles, et c'est un peu plus complexe:

# Fonction nécessaire selon Greg Lin, créateur de reactable

html <- fonction (x, en ligne = FALSE) {

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

conteneur (dangerouslySetInnerHTML = list ("__ html" = x))

}

réactable (nicar, interrogeable = TRUE, showSortable = TRUE,

colonnes = liste (

Ressource = colDef (html = TRUE, redimensionnable = TRUE),

Commentaires = colDef (show = FALSE)

),

# s'il existe un commentaire, rendre la ligne extensible

détails = fonction (index) {

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

htmltools :: tagList (

html (nicar $ Comments [index])

)

}

}

)

Je n'ai pas écrit cette partie moi-même; le créateur réactif Greg Lin l'a écrit. Honnêtement, je ne comprends pas ce que fait chaque ligne. Mais ça marche! 

Sharon Machlis

Vais-je me souvenir de ce code la prochaine fois que je souhaite créer un tableau avec des lignes extensibles? Non, absolument pas. Mais si je fais un extrait de code rstudio , je ne dois le rappeler. Ce sera toujours à quelques frappes de touches.

Si vous n'êtes pas du tout familiarisé avec les extraits de code RStudio, consultez l'épisode Do More With R sur les extraits de code pour une explication complète . Mais voici les bases.  

Créer un extrait de code RStudio

Vous trouverez ci-dessous une image de mon code de table mettant en évidence les variables de mon bloc de données et des noms de colonne, ainsi que la modification de la définition de colonne de la notation du signe dollar à la notation entre crochets (ce qui fonctionne beaucoup mieux dans les extraits de code). Aussi - très important - j'ai ajouté un titre d'extrait et mis en retrait chaque ligne de code avec un onglet de départ. C'est un must!

Sharon Machlis,

Ensuite, j'ai juste besoin de changer chaque nom de variable en une variable d'extrait de code générique : 1 pour le bloc de données, 2 pour la colonne que je souhaite afficher au format HTML et 3 pour la colonne de ligne extensible. Notez la syntaxe variable: ${number:variable_name}. Ces variables me permettront de remplir facilement les noms de variables réels dans RStudio. 

extrait de code my_expandable_row

html <- fonction (x, en ligne = FALSE) {

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

conteneur (dangerouslySetInnerHTML = list ("__ html" = x))

}

reactable ($ {1: mydf}, interrogeable = TRUE, showSortable = TRUE,

colonnes = liste (

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

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

),

détails = fonction (index) {

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

htmltools :: tagList (

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

)

}

}

)

Vous pouvez copier et coller l'extrait de code ci-dessus dans votre propre fichier d'extraits de code RStudio en utilisant

utilisez ceci :: edit_rstudio_snippets ()

pour ouvrir le fichier d'extraits de code dans RStudio. Assurez-vous que les guillemets de code d'extrait sont des guillemets simples et que chaque ligne est indentée avec une tabulation (pas seulement des espaces; une tabulation de départ pour chaque ligne de code est obligatoire).

Maintenant, si vous tapez le nom de l'extrait de code dans un fichier de script source R de RStudio, il doit se développer pour vous donner le code. Vous pouvez ensuite taper le nom de la première variable, cliquer sur l'onglet, taper le nom de votre deuxième variable, et ainsi de suite. Consultez la vidéo intégrée dans cet article pour voir comment cela fonctionne. Et profitez de vos propres tables interactives avec des lignes extensibles!

Pour plus de conseils R, rendez-vous sur la page Faire plus avec R.