データフレームからtable要素を作成する方法について検討しました。
dfをデータフレームとします。
col1 col2 col3 1 item1 item2 item3 2 item4 item5 item6
すると、このようにしてtable要素を作成できます。
library(htmltools) library(purrr) tags$table(pmap(df, ~tags$tr(map(list(...), ~tags$td(.x)))))
<table> <tr> <td>item1</td> <td>item2</td> <td>item3</td> </tr> <tr> <td>item4</td> <td>item5</td> <td>item6</td> </tr> </table>
この記事で使用したRとパッケージのバージョンを記載しておきます。
バージョンが異なると、動作や表示も若干異なる場合があるからです。
- R 3.6.1
- htmltools 0.3.6
- purrr 0.3.2
背景
こちらの記事で、htmltoolsパッケージを使い、htmlのtable要素を作成しました。

その際、データフレームからtable要素を作成できれば便利だなと思い、今回の記事作成に至りました。
データフレームからtable要素を作成する方法は他にもあるようです。
この記事の方法は参考の1つにして頂ければと思います。
方針
データフレームの行を受け取ってtr要素を作成する処理を、全行で行います。
tr要素の作成は、こちらの記事で紹介したul要素作成と同じ考え方を採用します。
その理由は、tr要素とul要素は構造が似ているからです。
行単位の処理は、purrrパッケージのpmap関数を使います。
pmap関数は、行に関数を適用し、その結果をリストで返してくれます。
以下の使用例を確認して下さい。
pmapの使用例
データフレームを用意し、パッケージを読み込みます。
df <- data.frame(col1 = c("item1", "item4"), col2 = c("item2", "item5"), col3 = c("item3", "item6"), stringsAsFactors = FALSE) df
col1 col2 col3 1 item1 item2 item3 2 item4 item5 item6
library(purrr)
例1
pmap(df, ~.x)
[[1]] [1] "item1" [[2]] [1] "item4"
この例では、各行の1つ目(1列目)の要素を取り出しています。
関数は適用していません。
例2
pmap(df, ~paste(.x, .y))
[[1]] [1] "item1 item2" [[2]] [1] "item4 item5"
この例では、各行の1つ目と2つ目の要素を結合しています。
例3
pmap(df, ~..3)
## [[1]] ## [1] "item3" ## [[2]] ## [1] "item6"
このように、要素の指定は番号でも可能です。
例4
pmap(df, ~list(...))
[[1]] [[1]]$col1 [1] "item1" [[1]]$col2 [1] "item2" [[1]]$col3 [1] "item3" [[2]] [[2]]$col1 [1] "item4" [[2]]$col2 [1] "item5" [[2]]$col3 [1] "item6"
行全体の指定は、list(…)を使います。
map同様(こちらの記事参照)第二引数はチルダ(~)で始め、各要素に対する処理を記述します。
データフレームからtable要素を生成する
まず、ul要素作成と同様の考え方で、tr要素を試しに作ります。
tags$tr(map(list("item1", "item2", "item3"), ~tags$td(.x)))
<tr> <td>item1</td> <td>item2</td> <td>item3</td> </tr>
無事に作れました。
pmapを使い、この処理をデータフレームの全行に適用します。
その際、list(“item1”, “item2”, “item3”)の箇所は、行全体を表すlist(…)で置き換えます。
pmap(df, ~tags$tr(map(list(...), ~tags$td(.x))))
[[1]] <tr> <td>item1</td> <td>item2</td> <td>item3</td> </tr> [[2]] <tr> <td>item4</td> <td>item5</td> <td>item6</td> </tr>
この結果をtags$tableの引数として渡してあげれば、table要素の完成です。
tags$table(pmap(df, ~tags$tr(map(list(...), ~tags$td(.x)))))
<table> <tr> <td>item1</td> <td>item2</td> <td>item3</td> </tr> <tr> <td>item4</td> <td>item5</td> <td>item6</td> </tr> </table>
まとめ
データフレームからtable要素を作成する方法について検討しました。
他のパッケージで既にありそうですが、関数にしても良いかも知れませんね。
では。
—
YouTube: ミサキさん
問い合わせ先
Mail: caprico.aries@gmail.com
Twitter: https://twitter.com/caprico_aries(無言フォローもお気軽に)
コメント
[…] すると、このようにしてtable要素を作成することができます。考え方はこちらの記事と同じです。 […]
[…] Rのデータフレームからhtmlのtable要素を作る(htmltools利用) […]