Rで解析:インタラクティブなDataTablesを作成「DTパッケージ」の紹介

Rの解析に役に立つ記事
スポンサーリンク

紹介するパッケージは、メニューでグループを指定して表示やテーブルを各種ファイルで出力などが可能なインタラクティブなテーブルをHTMLで出力することができるパッケージです。もちろん、CSSでデザインを指定することもできます。

機能が非常に多いパッケージです。日常的に使いそうな機能を紹介します。

パッケージのバージョンは0.21。実行コマンドはwindows 11のR version 4.1.2で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドをRで実行してください。

#パッケージのインストール
install.packages("DT")

実行コマンドと出力例

詳細はコマンド内のコメントを確認してください。

・パッケージ利用の事前準備

ファイルの保存先とデータ例の作成

#パッケージの読み込み
library("DT")

###ファイルの保存場所を指定#####
library("tcltk")
setwd(paste(as.character(tkchooseDirectory(title = "保存場所を選択"),
                         sep = "", collapse ="")))
########

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 50
TestData <- tibble(Group = sample(paste0("Group", 1:4), n,
                                  replace = TRUE),
                   X_num_Data = rnorm(n),
                   Y_num_Data = runif(n))
########

・最低限のテーブルを作成する:datatableコマンド

結果の出力は「htmlwidgets」パッケージのsaveWidgetコマンドを利用します。

#&#12452;&#12531;&#12479;&#12521;&#12463;&#12486;&#12451;&#12502;&#12394;&#12486;&#12540;&#12502;&#12523;&#12434;&#20316;&#25104;:datatable&#12467;&#12510;&#12531;&#12489;
TestHTML1 <- datatable(TestData, rownames = FALSE,
                       caption = "Table: datatable&#12467;&#12510;&#12531;&#12489;",
                       width = 550)

#&#32080;&#26524;&#12434;html&#12391;&#20986;&#21147;:htmlwidgets::saveWidget&#12467;&#12510;&#12531;&#12489;
saveWidget(TestHTML1, "TestHTML1.html")

・テーブルのカスタマイズ

列フィルタ、ハイパーリンクデータの書き込み、データの表示数、セルの塗りつぶしなどテーブルの体裁を整える例です。

##&#12459;&#12473;&#12479;&#12512;&#12501;&#12451;&#12523;&#12479;##
#filter&#12392;options&#12391;&#35373;&#23450;&#12375;&#12414;&#12377;
#options&#12399;list&#12391;&#35373;&#23450;&#12375;&#12414;&#12377;
TestHTML2 <- datatable(TestData, rownames = FALSE,
                       caption = "Table: &#12459;&#12473;&#12479;&#12512;&#12501;&#12451;&#12523;&#12479;", filter = "top",
                       options = list(Data1  = 100, autoWidth = TRUE),
                       width = 550)

#&#32080;&#26524;&#12434;html&#12391;&#20986;&#21147;:htmlwidgets::saveWidget&#12467;&#12510;&#12531;&#12489;
saveWidget(TestHTML2, "TestHTML2.html")
####

##&#12495;&#12452;&#12497;&#12540;&#12522;&#12531;&#12463;&#12434;&#21547;&#12416;&#12486;&#12461;&#12473;&#12488;##
#matrix&#12467;&#12510;&#12531;&#12489;&#12391;&#12487;&#12540;&#12479;&#12434;&#20316;&#25104;
#&#26032;&#12375;&#12356;&#12454;&#12451;&#12531;&#12489;&#12454;&#12364;&#38283;&#12365;&#12414;&#12377;
TESTURL <- matrix(c('<p>&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;</p>',
                    '<a href="http://karada-good.net" target="_blank">karada-good.net</a>'),
                  1)

#&#34892;&#21517;&#12398;&#35373;&#23450;
colnames(TESTURL) = c('<span style="color:blue">&#12502;&#12525;&#12464;&#21517;</span>', '<em>&#12463;&#12522;&#12483;&#12463;&#12375;&#12390;&#12397;</em>')

#escape&#12458;&#12503;&#12471;&#12519;&#12531;&#12395;FALSE&#12434;&#35373;&#23450;&#12375;&#12414;&#12377;
TestHTML3 <- datatable(TESTURL, rownames = FALSE,
                       caption = "Table: &#12495;&#12452;&#12497;&#12540;&#12522;&#12531;&#12463;", escape = FALSE,
                       width = 550)

#&#32080;&#26524;&#12434;html&#12391;&#20986;&#21147;:htmlwidgets::saveWidget&#12467;&#12510;&#12531;&#12489;
saveWidget(TestHTML3, "TestHTML3.html")
####

##&#12486;&#12540;&#12502;&#12523;&#12398;&#34920;&#31034;&#21015;&#25968;&#12392;&#34920;&#31034;&#21015;&#12513;&#12491;&#12517;&#12540;##
#options&#12458;&#12503;&#12471;&#12519;&#12531;&#12395;&#12522;&#12473;&#12488;&#12391;pageLength&#12392;lengthMenu&#12391;&#25351;&#23450;&#12375;&#12414;&#12377;
#&#21021;&#26399;&#12395;&#34920;&#31034;&#12373;&#12428;&#12427;&#21015;&#25968;&#12399;pageLength&#12391;&#65299;&#12395;&#35373;&#23450;&#12375;&#12390;&#12356;&#12414;&#12377;
TestHTML4 <- datatable(TestData, rownames = FALSE,
                       caption = "Table: &#12486;&#12540;&#12502;&#12523;&#12398;&#34920;&#31034;&#21015;&#25968;&#12392;&#34920;&#31034;&#21015;&#12513;&#12491;&#12517;&#12540;",
                       options = list(pageLength = 3,
                                      lengthMenu = c(6, 12, 18, 24)),
                       width = 550)

#&#32080;&#26524;&#12434;html&#12391;&#20986;&#21147;:htmlwidgets::saveWidget&#12467;&#12510;&#12531;&#12489;
saveWidget(TestHTML4, "TestHTML4.html")
####

##TestHTML1&#12398;&#12475;&#12523;&#12398;&#34920;&#31034;&#26360;&#24335;&#12434;&#35373;&#23450;##
#X_num_Data&#12434;&#36890;&#36008;&#34920;&#31034;,Y_num_Data&#12434;&#12497;&#12540;&#12475;&#12531;&#12488;&#34920;&#31034;
#&#21442;&#32771;&#65306;&#23567;&#25968;&#28857;&#12398;&#35519;&#25972;:formatRound&#12467;&#12510;&#12531;&#12489;
TestHTML5 <- TestHTML1 %>%
  formatCurrency("X_num_Data") %>%
  formatPercentage("Y_num_Data", 2)

#&#32080;&#26524;&#12434;html&#12391;&#20986;&#21147;:htmlwidgets::saveWidget&#12467;&#12510;&#12531;&#12489;
saveWidget(TestHTML5, "TestHTML5.html")
####

##TestHTML1&#12398;&#12475;&#12523;&#12398;&#32972;&#26223;&#33394;&#12392;&#25991;&#23383;&#33394;&#12434;&#35373;&#23450;##
#&#32972;&#26223;&#33394;&#12399;styleInterval&#12458;&#12503;&#12471;&#12519;&#12531;&#12434;&#20351;&#29992;&#12375;&#12390;&#12356;&#12414;&#12377;
#styleInterval(&#25968;&#20516;, c(&#25968;&#20516;&#20197;&#19979;&#12398;&#12475;&#12523;&#12398;&#33394;, &#25968;&#20516;&#20197;&#19978;&#12398;&#12475;&#12523;&#12398;&#33394;))
TestHTML6 <- TestHTML1 %>%
  formatStyle("X_num_Data", color = "#a87963",
              backgroundColor = styleInterval(250, c("#4b61ba", "#deb7a0")),
              fontWeight = "bold")&#12288;%>%
  formatStyle("Y_num_Data", color = "#28231e",
              backgroundColor = styleInterval(260, c("#ffdd99", "#a87963")),
              fontWeight = "bold")&#12288;

#&#32080;&#26524;&#12434;html&#12391;&#20986;&#21147;:htmlwidgets::saveWidget&#12467;&#12510;&#12531;&#12489;
saveWidget(TestHTML6, "TestHTML6.html")
####

##CSS&#12391;&#26360;&#24335;&#12434;&#35373;&#23450;##
#&#12497;&#12452;&#12503;"%>%"&#12391;&#12388;&#12394;&#12370;&#12390;formatStyle&#12391;&#35373;&#23450;&#12375;&#12414;&#12377;
TestHTML7 <- TestHTML1 %>%
  formatStyle("X_num_Data",
              transform = "rotateX(45deg) rotateY(20deg) rotateZ(30deg)",
              backgroundColor = "#a87963")

#&#32080;&#26524;&#12434;html&#12391;&#20986;&#21147;:htmlwidgets::saveWidget&#12467;&#12510;&#12531;&#12489;
saveWidget(TestHTML7, "TestHTML7.html")
####

・カスタムフィルタを設定

・ハイパーリンクを含むテキストを設定

・テーブルの表示列数と表示列メニュー

・TestHTML1のセルの表示書式を設定

・TestHTML1のセルの背景色と文字色を設定

・CSSで書式を設定

・インタラクティブな表の作成

メニューでグループを指定して表示、テーブルを各種ファイルで出力、テーブルのスクロールバーの追加例です。

##&#12513;&#12491;&#12517;&#12540;&#12391;&#12464;&#12523;&#12540;&#12503;&#12434;&#25351;&#23450;&#12375;&#12390;&#34920;&#31034;##
#extensions&#12458;&#12503;&#12471;&#12519;&#12531;&#12395;"Select", "SearchPanes"
#options&#12398;targets&#12399;&#12464;&#12523;&#12540;&#12503;&#21015;&#20197;&#22806;&#12434;&#25351;&#23450;&#12377;&#12427;
#targets&#12398;&#31684;&#22258;&#12399;0&#12363;&#12425;&#22987;&#12414;&#12427;
TestHTML8 <- datatable(TestData, rownames = FALSE,
                       caption = "Table: Select,SearchPanes",
                       extensions = c("Select", "SearchPanes"),
                       options = list(dom = "Pfrtip",
                                      columnDefs = list(list(
                                        searchPanes = list(show = FALSE),
                                        targets = 1:2))),
                       selection = "none",
                       width = 550)

#&#20316;&#25104;&#12486;&#12540;&#12502;&#12523;&#12434;html&#12391;&#20986;&#21147;
saveWidget(TestHTML8, "TestHTML8.html")
####

##&#12486;&#12540;&#12502;&#12523;&#12434;&#21508;&#31278;&#12501;&#12449;&#12452;&#12523;&#12391;&#20986;&#21147;##
#extensions&#12458;&#12503;&#12471;&#12519;&#12531;&#12395;"Buttons"
TestHTML9 <- datatable(TestData,
                       caption = "Table: Buttons",
                       extensions = "Buttons", options = list(
                         dom = "Bfrtip",
                         buttons = c("copy", "csv", "excel", "pdf", "print")
                       ),
                       width = 550)

#&#20316;&#25104;&#12486;&#12540;&#12502;&#12523;&#12434;html&#12391;&#20986;&#21147;
saveWidget(TestHTML9, "TestHTML9.html")
####

##&#12486;&#12540;&#12502;&#12523;&#12398;&#12473;&#12463;&#12525;&#12540;&#12523;##
#extensions&#12458;&#12503;&#12471;&#12519;&#12531;&#12395;"Scroller"
TestHTML10 <- datatable(TestData, rownames = FALSE,
                        caption = "Table: Scroller",
                        extensions = "Scroller",
                        options = list(deferRender = TRUE,
                                       dom = "frtiS",
                                       scrollY = 300,
                                       scrollCollapse = TRUE),
                        width = 550)

#&#20316;&#25104;&#12486;&#12540;&#12502;&#12523;&#12434;html&#12391;&#20986;&#21147;
saveWidget(TestHTML10, "TestHTML10.html")
####

・メニューでグループを指定して表示

・テーブルを各種ファイルで出力

ボタンをクリックすると対象フォーマットでデータを取得できます。

・テーブルのスクロールバー


少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました