web-dev-qa-db-ja.com

KnitRを使用してRでマークダウンテーブルをプログラムで作成する

私は、KnitRと、Rドキュメントとレポートの生成におけるMarkdownの使用について学び始めたところです。これは、私が自分の仕事に関係していることを毎日報告するのに最適です。ただし、Markdownの書式設定(xtableのようなものですが、LaTeXまたはHTMLの代わりにMarkdownを使用)を使用して、データフレームとテーブルを簡単に印刷できます。私はxtableからHTML出力を埋め込むことができることを知っていますが、Markdownベースのソリューションがあるかどうか疑問に思っていましたか?

100
TARehman

knitr(バージョン1.3以降)パッケージには、作成テーブル用のkable関数が含まれています。

> library(knitr)
> kable(head(iris[,1:3]), format = "markdown")
|  Sepal.Length|  Sepal.Width|  Petal.Length|
|-------------:|------------:|-------------:|
|           5,1|          3,5|           1,4|
|           4,9|          3,0|           1,4|
|           4,7|          3,2|           1,3|
|           4,6|          3,1|           1,5|
|           5,0|          3,6|           1,4|
|           5,4|          3,9|           1,7|

更新:ドキュメントで生のマークダウンを取得する場合は、セットアップresults = "asis"チャンクオプションを試してください。

118
Artem Klevtsov

これを行う2つのパッケージは pander です

library(devtools)
install_github('pander', 'Rapporter')

または ascii

panderは、レポート作成に対するわずかに異なるアプローチです(ただし、この機能には役立ちます)。

asciiを使用すると、type = 'pandoc(または他のさまざまなマークダウンフレーバー)でprintを使用できます

library(ascii)
print(ascii(head(iris[,1:3])), type = 'pandoc')



    **Sepal.Length**   **Sepal.Width**   **Petal.Length**  
--- ------------------ ----------------- ------------------
1   5.10               3.50              1.40              
2   4.90               3.00              1.40              
3   4.70               3.20              1.30              
4   4.60               3.10              1.50              
5   5.00               3.60              1.40              
6   5.40               3.90              1.70              
--- ------------------ ----------------- ------------------

どちらの場合でも、pandocを使用してマークダウンから目的のドキュメントタイプに変換することに注意してください。ただし、style='rmarkdown'を使用すると、このmarkdownパッケージと組み込みのテーブルが作成されますrstudioでの変換。

31
mnel

私がやろうとしていることでこれを更新したかっただけです。現在、hwriterパッケージを使用してテーブルを印刷し、row.*およびcol.*機能を使用してCSSクラスを異なる要素に配置しています。次に、カスタムCSSを作成して、希望どおりにディスプレイを作成しました。それで、他の誰かが同様のものを扱っている場合の例を示します。

最初に、knittingを実行するファイルを作成し、MarkdownをHTMLに変更します。

FILE: file_knit.r
#!/usr/bin/env Rscript

library(knitr)
library(markdown)

knit("file.Rmd")
markdownToHTML("file.md","file.html",stylesheet="~/custom.css")

次に、実際のMarkdownファイルを作成します。

FILE: file.Rmd
Report of Fruit vs. Animal Choices
==================================

This is a report of fruit vs. animal choices.

```{r echo=FALSE,results='asis'}
library(hwriter)
set.seed(9850104)
my.df <- data.frame(Var1=sample(x=c("Apple","Orange","Banana"),size=40,replace=TRUE),
                    Var2=sample(x=c("Dog","Cat","Bunny"),size=40,replace=TRUE))

tbl1 <- table(my.df$Var1,my.df$Var2)

tbl1 <- cbind(tbl1,rowSums(tbl1))
tbl1 <- rbind(tbl1,colSums(tbl1))

colnames(tbl1)[4] <- "TOTAL"
rownames(tbl1)[4] <- "TOTAL"

# Because I used results='asis' for this chunk, I can just use cat() and hwrite() to 
# write out the table in HTML. Using hwrite()'s row.* function, I can assign classes
# to the various table elements.
cat(hwrite(tbl1,
           border=NA,
           table.class="t1",
           row.class=list(c("header col_first","header col","header col","header col", "header col_last"),
                          c("col_first","col","col","col","col_last"),
                          c("col_first","col","col","col","col_last"),
                          c("col_first","col","col","col","col_last"),
                          c("footer col_first","footer col","footer col","footer col","footer col_last"))))
```

最後に、カスタムCSSファイルを作成します。

FILE: custom.css
body {
  font-family: sans-serif;
  background-color: white;
  font-size: 12px;
  margin: 20px;
}

h1 {font-size:1.5em;}

table {
  border: solid;
  border-color: black;
  border-width: 2px;
  border-collapse: collapse;
  margin-bottom: 20px;
  text-align: center;
  padding: 0px;
}

.t1 .header {
  color: white;
  background-color: black;
  border-bottom: solid;
  border-color: black;
  border-width: 2px;
  font-weight: bold;
}

.t1 .footer {
  border-top: solid;
  border-color: black;
  border-width: 2px;
}

.t1 .col_first {
  border-right: solid;
  border-color: black;
  border-width: 2px;
  text-align: left;
  font-weight: bold;
  width: 75px;
}

.t1 .col {
  width: 50px;
}

.t1 .col_last {
  width: 50px;
  border-left: solid;
  border-color: black;
  border-width: 2px;
}

./file_knit.rを実行すると、次のようなfile.htmlが表示されます。

Example Output

したがって、これがMarkdownの出力でもう少しフォーマットをしたい他の人に役立つことを願っています!

25
TARehman

panderパッケージには関数があります:

> library(pander)
> pandoc.table(head(iris)[, 1:3])

-------------------------------------------
 Sepal.Length   Sepal.Width   Petal.Length 
-------------- ------------- --------------
     5.1            3.5           1.4      

     4.9             3            1.4      

     4.7            3.2           1.3      

     4.6            3.1           1.5      

      5             3.6           1.4      

     5.4            3.9           1.7      
-------------------------------------------
18
Marius

独自のカスタマイズされた機能を作成することはそれほど難しくありません。 data.frameのrmarkdownテーブルを生成するための非常に簡単な概念実証を次に示します。

   rmarkdownTable <- function(df){
      cat(paste(names(df), collapse = "|"))
      cat("\n")
      cat(paste(rep("-", ncol(df)), collapse = "|"))
      cat("\n")

      for(i in 1:nrow(df)){
        cat(paste(df[i,], collapse = "|"))
        cat("\n")
        }
    invisible(NULL)
    }

.Rmdドキュメントでは、results = 'asis'で関数を使用します。

```{r, results = 'asis'}
rmarkdownTable <- function(df){
  cat(paste(names(df), collapse = "|"))
  cat("\n")
  cat(paste(rep("-", ncol(df)), collapse = "|"))
  cat("\n")

  for(i in 1:nrow(df)){
    cat(paste(df[i,], collapse = "|"))
    cat("\n")
    }
invisible(NULL)
}

rmarkdownTable(head(iris))
```

上記のコードは次の図を示します(この例ではpdf出力ですが、テーブルはmarkdwonにあるため、htmlまたはWordに編むこともできます)。

enter image description here ここから-他の人のコードを読む-テキストを操作して、必要なテーブルを生成し、よりパーソナライズされた関数を作成する方法を理解できます。

12
Carlos Cinelli

マークダウンドキュメントでknitr :: kableとxtableの組み合わせを使用します。

library("knitr","xtable")

シンプルなdata.frameの場合-

kable(head(mtcars[,1:4]),format="markdown")
kable(head(mtcars[,1:4]),format="pandoc",caption="Title of the table")

format="pandoc"では、キャプションなどのオプションを追加できます。

model summaryの組み合わせになりました。

data(tli)
fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli)
kable(xtable(fm1), caption = "Annova table")

さらに多くのオプションについては、stargazerの代わりにxtableパッケージを見てください。

個人使用の例

3
Pankil Shah

Rでマークダウンテーブルを作成/作成するには、 MarkdownReports 'MarkDown_Table_writer_DF_RowColNames()またはMarkDown_Table_writer_NamedVector()関数を使用することもできます。次元名を持つデータフレーム/マトリックス、または名前を持つベクトルを渡すだけで、Markdown形式でテーブルを解析および書き出します。

1
bud.dugong