it-swarm.dev

KnitR을 사용하여 프로그래밍 방식으로 R에서 Markdown 테이블 만들기

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|

UPDATED : 문서에서 원시 마크 다운이 발생하면 설정을 시도하십시오 results = "asis" 청크 옵션.

118
Artem Klevtsov

이를 수행하는 두 가지 패키지는 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을 수행 할 파일을 만들고 마크 다운을 HTML로 변경하십시오.

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

library(knitr)
library(markdown)

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

다음으로 실제 마크 다운 파일을 만듭니다.

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"는 자막과 같은 추가 옵션을 허용합니다.

이제 모델 요약 의 조합입니다.

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

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

개인 사용 예

3
Pankil Shah

R에서 Markdown 테이블을 쓰거나 만들려면 MarkdownReports 'MarkDown_Table_writer_DF_RowColNames() 또는 MarkDown_Table_writer_NamedVector() 함수를 사용할 수도 있습니다. 차원 이름이있는 데이터 프레임/행렬 또는 이름이있는 벡터를 전달하면 표를 형식화하여 테이블을 구문 분석하고 씁니다.

1
bud.dugong