Rで解析:表を作るのに困ったら「gt」パッケージ

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

表を作るコマンドが一通り収録されているパッケージの紹介です。表内の文字やセルの体裁を整えることはもちろん、HTML、PDF、PNG、LaTeX、RTF形式での出力、データの分割、表にggplotオブジェクトを埋め込むコマンドなどが収録されています。多くのコマンドが収録されています。興味があればパッケージヘルプを確認してください。

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

スポンサーリンク

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

下記、コマンドを実行してください。また、PDF、PNG形式での出力に必要な「webshot」パッケージのinstall_phantomjsコマンドを実行し「phantomjs」をインストールます。

#パッケージのインストール
install.packages("gt")
#webshotパッケージがなければインストール
install.packages("webshot")
#webshot::install_phantomjs()コマンドを実行
webshot::install_phantomjs(force = TRUE)

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

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

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 10
TestData <- tibble(Group = sample(paste0("Group", 1:4), n,
                                  replace = TRUE),
                   Num_Data = sample(c(1:50), n, replace = TRUE),
                   Currency = sample(c(1000:10000), n, replace = TRUE),
                   Fct_Data_1 = factor(sample(c("か", "ら", "だ", "に",
                                                "い", "い", "も", "の"),
                                              n, replace = TRUE)),
                   Chr_Data = sample(c("か", "ら", "だ", "に",
                                       "い", "い", "も", "の"),
                                     n, replace = TRUE),
                   Fct_Data_2 = factor(sample(c("か", "ら", "だ", "に",
                                                "い", "い", "も", "の"),
                                              n, replace = TRUE)))
#ggplotオブジェクトを作成
plot_object <- ggplot(TestData, aes(x = Num_Data)) +
  geom_bar(color = "blue") +
  theme(legend.position = "none")
########



###基本的なコマンド#####
#表の基礎となるgtオブジェクトを作成:gtコマンド
#表を指定グループで分割:groupname_colオプション;
#初期値:dplyr::group_vars(data)
#行名データを指定:rowname_colオプション;初期値:"rowname"
#他オプションはヘルプ参照
TestData %>% 
  gt(groupname_col = "Chr",
       rowname_col = "Group")

#表を保存:gtsaveコマンド
#保存形式:HTML,PDF,PNG,LaTeX,RTFが対応
#実施エラーの場合はwebshot::install_phantomjs()コマンドを実行
TestData %>% 
  gt(groupname_col = "Chr",
     rowname_col = "Group") %>%
  gtsave("Test.png", path = NULL)
########



###表の体裁コマンド#####
#流れで説明
TestData %>% 
  gt() %>%
  #表を指定グループで分割:tab_row_groupコマンド
  #ラベルを指定:labelオプション
  #基準を指定:rowsオプション;正規表現も設定可能
  tab_row_group(label = "Num_Data >= 25",
                rows = Num_Data >= 25) %>%
  tab_row_group(label = "Fct_Dataが「に」",
                rows = Fct_Data_1 == "に") %>%
  
  #ヘッダーを編集:tab_headerコマンド
  tab_header(title = "KARADA TITLE",
             subtitle = "からだ いいもの") %>%
  
  #フッター側にノートを記述:tab_source_noteコマンド
  #ノート内容:source_noteオプション
  tab_source_note(source_note = "*KARADA-いいもの") %>%
  
  #指定文字で列名を分割し列ラベル,データラベル表示にする:
  #tab_spanner_delimコマンド
  #分割文字:delimオプション
  #区切り位置:spilitオプション;"last"/"first"
  #列を指定:columnsオプション;初期値:everything()
  tab_spanner_delim(delim = "_",
                    split = "last",
                    columns = c(Fct_Data_1, Fct_Data_2)) %>%
  
  #列ラベルを追加:tab_spannerコマンド
  tab_spanner(label = "ひらがな_数字",
              columns = c(Chr_Data, Currency)) %>%
  #列サブタイトルを追加:tab_stubheadコマンド
  #tab_row_groupコマンドと同時不可
  #tab_stubhead(label = "てすと") %>%
  #########
  
#各セルの書式を設定:tab_styleコマンド
  #書式を設定:styleオプション
  #各設定はlistまたはcell_XXXコマンドで記述
  #適応条件を指定:locationsオプション
  #各設定はlistまたはcells_XXXコマンドで記述
  tab_style(
    #書式を設定
    style =
      list(
      #塗り色設定:cell_fillコマンド
      #アルファ値:alphaオプション;0:1
      cell_fill(color = "lightcyan", alpha = NULL),
      
      #テキスト設定:cell_textコマンド
      #色:colorオプション
      #サイズ:sizeオプション;"xx-small","x-small","small",
      #"medium","large","x-large","xx-large"
      #水平位置:alignオプション;"center","left","right","justify"
      #垂直位置:v_alignオプション;"middle","top","bottom"
      #フォントスタイル:styleオプション;"normal","italic","oblique"
      #フォントウェイト:weightオプション;"normal","bold","lighter",
      #"bolder"または1:1000の数字
      #上付き,下付きの設定:transformオプション;
      #"uppercase","lowercase","capitalize"
      #ホワイトスペース:whitespaceオプション;
      #"normal","nowrap","pre","pre-wrap","pre-line","break-spaces"
      #インデント:indentオプション;ピクセル値
      cell_text(weight = "bold", align = "center", v_align = "middle"),
      
      #枠線設定:cell_bordersコマンド
      #位置:sideオプション;""all,"left","right","top","bottom"
      #線種:styleオプション;solid,"dashed","dotted"
      cell_borders(sides = "all", color = "red",
                   style = "dashed", weight = px(2))
      ),
      
      #適応条件を指定
      locations = cells_body(columns = Num_Data,
                             rows = Num_Data >= 20)) %>%
  
  #各セルの書式を設定
  tab_style(
    style = list(cell_fill(color = "#92C2FF")),
    locations = cells_body(columns = "Chr_Data",
                           rows = c(1, 5, 10))) %>%
  
  #数値を通貨表示にする:fmt_currencyコマンド
  #通貨を指定:currencyオプション;"USD","pound","yen","EUR"など
  #他はinfo_currencies()を実行するとViewerで表示されます
  #対象列を指定:columnsオプション
  #小数点の表示:decimalsオプション
  fmt_currency(columns = Currency,
               currency = "yen",
               decimals = 0) %>%
  
  #数値をパーセントにする:fmt_currencyコマンド
  fmt_percent(columns = Num_Data, 
              decimals = 0) %>%
  
  #グループの順番を入れ替え:row_group_orderコマンド
  #グループ名が付いてないグループはNAで指定
  row_group_order(groups = c("Num_Data >= 25", NA)) %>%
  
  #ggplotオブジェクトを挿入:text_transform,ggplot_imageコマンドを組み合わせる
  text_transform(locations = cells_body(columns = Num_Data, rows = 2),
                 fn = function(x) {
                   plot_object %>%
                     ggplot_image(height = px(200))}) %>%
  
  #作業フォルダに保存
  gtsave("Test.png", path = NULL)

出力例


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

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