表に自由に色を塗る_kableExtraパッケージの紹介

Excelで表を作っていたあの頃のように、Rmarkdownで作った表にも自由に色を塗りたい...。そんな方へkableExtraパッケージのご紹介です。
　ちなみに、このパッケージは、基本的にはHTMLやLatex形式での出力向けの関数のようです。Wordにも出力できるようですが、コピー&ペーストで少々めんどくさそう。ですので、今回はHTML形式で出力する場合やRでiosスライドを作成する場合を想定しています。
　
# パッケージのインストール
* 以下のコードでインストールした場合、R MarkdownをKnitする際にErrorが出る場合があります。その際は、こちらのコード```devtools::install_github("kupietz/kableExtra")```で再度インストールしてください（2023/11/13追記）。参考記事：[Error when loading kableExtra in markdown file after updating to R 4.3.0](https://stackoverflow.com/questions/76118194/error-when-loading-kableextra-in-markdown-file-after-updating-to-r-4-3-0) もしくは [Errors in Bookdown after updating R 4.3.0 #750](https://github.com/haozhu233/kableExtra/issues/750)

```
install.packages("kableExtra")
```

# 表の作成
　Rのirisのデータを使って作成します。

```
library(kableExtra)
table.1 <- iris
kableExtra::kbl(table.1) 
```

　これだけだとシンプルすぎて見づらいので、テーマの設定をします。様々なテーマがありますが、個人的にお勧めなテーマを今回は設定します。パイプ（%>%）を使って、設定を追加していきます。

```
table.1 %>%
  kableExtra::kbl() %>%
  kable_styling(
    bootstrap_options = c("striped"),
                full_width = T)
```


![Rplot1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344524/6a6753a0-5871-9080-1f61-94886bd862b8.png)


# 行に色を塗る
　row_spec関数を使用します。row_spec(塗りたい行, color = "文字の色",bold = TRUE/FALSE ,background = "塗りつぶす色")のように指定します。

```
table.1 %>%
  kableExtra::kbl() %>%
  kable_styling(
    bootstrap_options = c("striped"),
                full_width = T)%>%
  row_spec(
    1, #塗りたい行
    color = "black", #文字の色 
    bold = TRUE , #文字の太字
    background = "lightblue") #塗りつぶす色
```

　一行目が黒い文字の太字で、青色の背景で塗られていますね。

![Rplot2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344524/7439d80e-fe28-267a-82b4-382f8e5db332.png)

# 列に色を塗る
　列の場合は、column_spec関数です。引数の指定もrow_spec関数とほとんど一緒です。しかし、画像をセルに挿入するimageなどの面白い引数がありますので、詳しくはhelp関数で見てみてください。

```
table.1 %>%
  kableExtra::kbl() %>%
  kable_styling(
    bootstrap_options = c("striped"),
                full_width = T)%>%
  column_spec(
    2, 
    color = "black", 
    bold = TRUE ,
    background = "lightblue")

```

![Rplot3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344524/32eca281-ab4d-d62f-5c81-efeb092f989f.png)

# 条件を指定して色を塗る
　条件に応じてセルの色を塗り分けたい場合があると思います。条件の指定は様々だと思いますが、今回は[こちらの記事](https://community.rstudio.com/t/conditional-formatting-with-column-spec-within-a-dplyr-chain/84347/4)を参考に指定しました。

```
table.1 %>%
  kableExtra::kbl() %>%
  kable_styling(
    bootstrap_options = c("striped"),
                full_width = T) %>%
  column_spec(2, #色を塗る列を指定
              background = ifelse(table.1$Sepal.Width > 3, 
                             "lightblue", "lightgreen"))
```

![Rplot4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344524/96ac19b3-8d65-29bc-0747-7444d8150893.png)


　機能がかなり多いので今回はごく一部の機能の紹介です。ぜひこのパッケージの作成者のページ（参考資料）をご覧ください。沢山の機能が丁寧に説明されています（英語です）。

参考資料：
1. [Create Awesome HTML Table with knitr::kable and kableExtra](https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html#Overview)
2. [Conditional formatting with column_spec within a dplyr chain](https://community.rstudio.com/t/conditional-formatting-with-column-spec-within-a-dplyr-chain/84347)