KnitR을 사용하여 R에서 프로그래밍 방식으로 마크 다운 테이블 생성 사용하여 데이터 프레임과 테이블을 인쇄하는

R 문서와 보고서를 생성 할 때 KnitR과 Markdown을 사용하는 방법을 배우기 시작했습니다. 이것은 내 직업과 관련이있는 많은 일상적인 보도에 완벽 해 보입니다. 그러나 내가 보지 못한 한 가지는 Markdown 서식을 사용하여 데이터 프레임과 테이블을 인쇄하는 쉬운 방법입니다 (예 :와 비슷 xtable하지만 LaTeX 또는 HTML 대신 Markdown 사용). xtable에서 HTML 출력 만 임베드 할 수 있다는 것을 알고 있지만 Markdown 기반 솔루션이 있는지 궁금합니다.



답변

이제 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"청크 설정 옵션을 시도하십시오 .


답변

이를 수행하는 두 개의 패키지는 pander입니다.

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

또는 ascii

pander 보고서 구성에 대한 약간 다른 접근 방식이지만이 기능에 유용 할 수 있습니다.

ascii당신을 수 printtype = 'pandoc(또는 다른 다양한 가격 인하 맛)

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.


답변

내가하기로 결정한 것으로 이것을 업데이트하고 싶었습니다. hwriter지금 패키지를 사용하여 표를 인쇄하고 row.*col.*기능을 사용하여 CSS 클래스를 다른 요소에 배치 하고 있습니다. 그런 다음 사용자 정의 CSS를 작성하여 원하는대로 디스플레이를 만들었습니다. 그래서, 다른 사람이 비슷한 것을 다루는 경우의 예가 있습니다.

먼저 knittingMarkdown을 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이 제공됩니다.

예제 출력

따라서 Markdown 출력에서 ​​좀 더 많은 서식을 지정하려는 다른 사용자에게 도움이되기를 바랍니다.


답변

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
-------------------------------------------


답변

나만의 맞춤형 기능을 만드는 것은 그리 어렵지 않습니다. 다음은 a의 rmarkdown 테이블을 생성하는 매우 간단한 개념 증명입니다 data.frame.

   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로도 니트 할 수 있음).

여기에 이미지 설명 입력
여기에서 다른 사람의 코드를 읽고 원하는 테이블을 생성하고보다 개인화 된 기능을 생성하기 위해 텍스트를 조작하는 방법을 파악할 수 있습니다.


답변

markdown 문서에서 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" 캡션과 같은 더 많은 옵션을 허용합니다.

이제 모델 요약을 위한 조합 .

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

더 많은 옵션을 보려면 stargazer 대신 패키지 xtable.

개인적인 사용을위한 예


답변

R에서 Markdown 테이블을 작성 / 생성하려면 MarkdownReports MarkDown_Table_writer_DF_RowColNames() 또는 MarkDown_Table_writer_NamedVector()함수를 사용할 수도 있습니다 . 차원 이름이있는 데이터 프레임 / 행렬 또는 이름이있는 벡터를 전달하기 만하면 표를 Markdown 형식으로 구문 분석하고 기록합니다.