拡張可能な行を持つRでテーブルを作成する方法

検索と並べ替えを備えたインタラクティブなテーブルは、データを探索するための優れた方法です。また、そのデータを他の人と共有したい場合もあります。これには、Do More WithRビデオチュートリアルのリストなどのテキストのみのデータが含まれます。

ただし、そのデータにかなり長いエントリを含む列が含まれている場合、その列は画面の幅のテーブルにうまく収まらない可能性があります。すべての行に非常に幅の広い列が含まれているとは限らない場合、これは特に注意が必要です。たとえば、1つのフィールドが「追加のコメントはありますか?」であるアンケート結果の表。誰もがそうするわけではありません。

ここで、拡張可能な行を持つテーブルが役立ちます。今年初めのNICARデータジャーナリズム会議で、講演者(および他の参加者)がセッションプレゼンテーションへのリンクを送信できるようにフォームを投稿しました。一部の人々は追加のコメントを追加しました。他の人はしませんでした。デフォルトでその列を表示すると、多くの画面領域が無駄になります。

代わりに、そのコメントフィールドは、ユーザーが行の展開アイコンをクリックした場合にのみ、NICARリソースのインタラクティブテーブルに表示されます。以下のスクリーンショットでわかるように、すべての行にそのフィールドのデータがあるわけではないため、トピック名の左側にあるクリック可能なアイコンですべての行を展開できるわけではありません。

シャロン・マクリス、

このようなテーブルの作り方を見てみましょう。 

フォローしたい場合は、リアクティブパッケージをインストールしてロードします。このデモでは、rio、glue、htmltools、およびdplyrパッケージもインストールする必要があります。

このデモで使用するデータは、以下のリンクからダウンロードできます。これは、今年のNICAR会議でのRおよびPythonセッションに関する小さな(15行)データセットです。

2020NICARデータジャーナリズム会議SharonMachlisでのRおよびPythonセッションに関する15行の情報を拡張可能な行を持つテーブルのRデモデータセットでさらにダウンロード

Rで反応可能およびdplyrをロードします

以下のコードでは、reactableとdplyrをロードしてから、を使用してデータをインポートしrio::import()ます。 

ライブラリ(反応可能)

ライブラリ(dplyr)

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

データには、リソースの名前(What)、作成者(Who)、TheURL、Tags、Type、およびCommentsの列があります。

次に、各リソースへのクリック可能なリンクを含むResourceという新しい列を作成します。ユーザーがテーブルに表示されているリソースに簡単にアクセスできるように、What列とTheURL列を使用して少し基本的なHTMLを記述しています。

次に、必要な列を必要な順序で選択します。

ニカー%

mutate(

リソース= glue :: glue( "{What}")

)%>%

select(リソース、誰、タグ、タイプ、コメント)

基本的な反応可能なテーブルから始めます 

最後に、基本的なデフォルトの反応可能なテーブルを作成します。

反応可能(nicar)

そして、この表は基本的なものです。検索ボックスはまだありません。[リソース]列には、HTMLとして表示される代わりに、実際のHTMLコードが表示されます。 

シャロン・マクリス、

次のコードグループでは、テーブルに検索ボックスと、列が並べ替え可能であることを示す小さな矢印アイコンを追加します。

reactable(nicar、searchable = TRUE、showSortable = TRUE、showSortIcon = TRUE)

リソース列をHTMLとして表示するようにreactableに指示するには、columns引数と、colDefが1つ以上の列の属性を設定するリストを使用します。以下html = trueでは、HTMLとして表示されるようにリソース列を設定し、その列のサイズを変更できるようにしています。

reactable(nicar、searchable = TRUE、showSortable = TRUE、showSortIcon = TRUE、

列=リスト(

リソース= colDef(html = TRUE、サイズ変更可能= TRUE)

メインテーブルのコメント列を表示しないようにreactableに指示するために、を設定しましたcolDef(show = FALSE)

reactable(nicar、searchable = TRUE、showSortable = TRUE、showSortIcon = TRUE、

列=リスト(

リソース= colDef(html = TRUE、サイズ変更可能= TRUE)、

コメント= colDef(show = FALSE)

ここまでは順調ですね。

シャロン・マクリス、

拡張可能な行の反応可能なコードを追加する

次のステップは拡張可能な行を追加することですが、それはもう少し複雑です。

#reactableの作成者であるGregLinによると必要な機能

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

コンテナ<-if(インライン)htmltools :: span else htmltools :: div

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

}

reactable(nicar、searchable = TRUE、showSortable = TRUE、

列=リスト(

リソース= colDef(html = TRUE、サイズ変更可能= TRUE)、

コメント= colDef(show = FALSE)

)、

#コメントがある場合は、行を展開可能にします

詳細=関数(インデックス){

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

htmltools :: tagList(

html(nicar $ Comments [index])

}

}

私はこの部分を自分で書いたのではありません。反応可能なクリエーターのグレッグ・リンが書いた。正直なところ、私はすべての行が何をしているのか理解していません。しかし、それは機能します! 

シャロン・マクリス

次回拡張可能な行を含むテーブルを作成するときに、このコードを覚えていますか?いいえ、絶対にありません。ただし、RStudioコードスニペットを作成する場合、覚えておく必要はありません。それは常にほんの数回のキーストロークで終わります。

RStudioコードスニペットにまったく慣れていない場合は、コードスニペットのDo More WithRエピソードで完全な説明を確認してくださいしかし、ここに基本があります。  

RStudioコードスニペットを作成する

以下は、データフレームと列名の変数を強調表示し、列定義をドル記号表記からブラケット表記に変更したテーブルコードの画像です(スニペットではるかにうまく機能します)。また、非常に重要ですが、スニペットタイトルを追加し、コードのすべての行を開始タブでインデントしました。それは必見です!

シャロン・マクリス、

次に、各変数名を汎用スニペット変数に変更する必要があります。1はデータフレーム、2はHTMLとして表示する列、3は展開可能な行の列です。変数の構文に注意してください:${number:variable_name}。これらの変数を使用すると、RStudioで実際の変数名を簡単に入力できます。 

スニペットmy_expandable_row

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

コンテナ<-if(インライン)htmltools :: span else htmltools :: div

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

}

reactable($ {1:mydf}、searchable = TRUE、showSortable = TRUE、

列=リスト(

$ {2:html_column} = colDef(html = TRUE、サイズ変更可能= TRUE)、

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

)、

詳細=関数(インデックス){

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

htmltools :: tagList(

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

}

}

上記のスニペットコードをコピーして、独自のRStudioスニペットファイルに貼り付けることができます。

usethis :: edit_rstudio_snippets()

RStudioでスニペットファイルを開きます。スニペットコードの引用符がプレーン引用符であり、各行がタブでインデントされていることを確認してください(スペースだけでなく、コードの各行の開始タブは必須です)。

ここで、RStudioソースRスクリプトファイルにスニペットの名前を入力すると、スニペットが展開されてコードが表示されます。次に、最初の変数の名前を入力し、Tabキーを押し、2番目の変数の名前を入力します。この記事に埋め込まれているビデオをチェックして、これがどのように機能するかを確認してください。そして、拡張可能な行を備えた独自のインタラクティブテーブルをお楽しみください!

Rのヒントについては、「Rでもっとやる」ページにアクセスしてください。