Rで解析:WordやPowerPointへ表を出力「flextable」パッケージ

Rの解析に役に立つ記事

htmlだけでなくWordやPowerPointファイルへ表を出力できるパッケージの紹介です。WordやPowerPointへ出力した表は各ソフトウェア内で編集できるので大変便利なパッケージだと思います。

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

スポンサーリンク
スポンサーリンク

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

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

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

コマンドの紹介

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

#パッケージの読み込み
library("flextable")
#officerパッケージがなければインストール
if(!require("officer", quietly = TRUE)){
  library("officer");require("officer")
}
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}

###データ例の作成#####
n <- 5
TestData <- data.frame("SubGroup" = sample(c("KA", "RA", "DA"),
                                           n, replace = TRUE),
                       "ID" = sample(letters[1:24], n, replace = FALSE),
                       "Area" = 1:n, "Point" = 0.1:(0.1*n),
                       "Facet" = sample(letters[1:2], n, replace = TRUE))
########

#flextableオブジェクトの作成:regulartableコマンド
#表示列を指定:col_keysオプション
#セル幅を指定:cwidthオプション
#セル高さを指定:cheightオプション
FtObject <- regulartable(data = TestData, col_keys = names(TestData),
                            cwidth = 0.75, cheight = 0.25)

#flextableオブジェクトの表示:printコマンド
#表示形式を指定:previewオプション;"html","pptx","docx"から選択
print(FtObject, preview = "html")

#テーマを適用:theme_vanillaコマンド
#他にtheme_booktabs,theme_box,theme_tron,theme_tron_legacy,theme_zebraがある
VFtObject <- theme_vanilla(FtObject)
print(VFtObject, preview = "html")

#セルを垂直方向にグループ化して表示:merge_vコマンド
MvVFtObject <- merge_v(VFtObject, j = "SubGroup")
print(MvVFtObject, preview = "html")

#セルの幅高さを自動調整:autofitコマンド
FitMvVFtObject <- autofit(MvVFtObject)
print(FitMvVFtObject, preview = "html")

#セル背景色を指定:bgコマンド
#列位置を指定:iオプション
#行位置を指定:jオプション
#色を指定:bgオプション
#位置で指定:partオプション;"all","body","header"から選択
BgFitMvVFtObject <- bg(FitMvVFtObject, i = c(3, 5), j = 2:4, bg = "red")
print(BgFitMvVFtObject, preview = "html")

#文字色を指定:colorコマンド
#色を指定:colorオプション
#その他オプションはbgコマンドと共通
ColBgFitMvVFtObject <- color(BgFitMvVFtObject, i = 3, j = 2:4, color = "yellow")
print(ColBgFitMvVFtObject, preview = "html")

#線色を指定:borderコマンド
#色の設定:borderオプション;fp_border(color = 色)で指定
#その他オプションはbgコマンドと共通
BoColBgFitMvVFtObject <- border(ColBgFitMvVFtObject,
                                border = officer::fp_border(color = "green"),
                                part = "all")
print(BoColBgFitMvVFtObject, preview = "html")

#文字位置を指定:alignコマンド
#位置を指定:alignオプション;"left","right","center","justify"
#その他オプションはbgコマンドと共通
AlignFtObject <- align(BoColBgFitMvVFtObject, align = "center", part = "all")
print(AlignFtObject, preview = "html")

#文字サイズを指定:fontsizeコマンド
#文字サイズを指定:sizeオプション
#その他オプションはbgコマンドと共通
SizeAlignFtObject <- fontsize(AlignFtObject, size = 9, part = "body")
print(SizeAlignFtObject, preview = "html")

#太文字指定:boldコマンド
BoldFtObject <- bold(SizeAlignFtObject, part = "header")
print(BoldFtObject, preview = "html")

#イタリック:italicコマンド
ItaBoldFtObject <- italic(BoldFtObject, i = ~ Area > 3,
                             j = ~ Area, italic = TRUE)
print(ItaBoldFtObject, preview = "html")

#紹介コマンドを一括適応してWordで出力
#officerパッケージ:read_docxコマンド
#dplyrパッケージ:%>%コマンド
#flextableパッケージ:body_add_flextableコマンド
read_docx() %>%
  body_add_flextable(
    regulartable(data = TestData, col_keys = names(TestData),
                 cwidth = 0.75, cheight = 0.25) %>%
      theme_vanilla() %>%
      merge_v(j = "SubGroup") %>%
      autofit() %>%
      bg(i = c(3, 5), j = 2:4, bg = "red") %>%
      color(i = 3, j = 2:4, color = "yellow") %>%
      border(border = fp_border(color = "green"), part = "all") %>%
      align(align = "center", part = "all") %>%
      fontsize(size = 9, part = "body") %>%
      italic(i = ~ Area < 3, j = ~ Area, italic = TRUE)) %>%
  print(target = "Test.docx")

#紹介コマンドを一括適応してPowerPointで出力
#officerパッケージ:read_pptxコマンド,add_slideコマンド
#dplyrパッケージ:%>%コマンド
#flextableパッケージ:ph_withコマンド
read_pptx() %>%
  add_slide(layout = "Title and Content", master = "Office Theme") %>%
  ph_with(location = ph_location(width = 1, height = 1,
                                 newlabel = "KARADAGOOD"),
    regulartable(data = TestData, col_keys = names(TestData),
                 cwidth = 0.75, cheight = 0.25) %>%
      theme_vanilla() %>%
      merge_v(j = "SubGroup") %>%
      autofit() %>%
      bg(i = c(3, 5), j = 2:4, bg = "red") %>%
      color(i = 3, j = 2:4, color = "yellow") %>%
      border(border = fp_border(color = "green"), part = "all") %>%
      align(align = "center", part = "all") %>%
      fontsize(size = 9, part = "body") %>%
      italic(i = ~ Area < 3, j = ~ Area, italic = TRUE)) %>%
  print(target = "Test.pptx")

出力例

・theme_vanillaコマンド

・merge_vコマンド

・紹介コマンドを全て適応


・Wordへ出力



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

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