如何在RMarkdown中手动简单地格式化表格,在转换为HTML(使用knitr和markdown包),PDF(使用pandoc和miktex)和docx(使用pandoc)时看起来不错?
我希望能够在RMarkdown中编写小表,这些表不是R函数的结果,这些函数在我最常使用的三种格式中看起来很好。到目前为止,我发现3种格式中有2种格式看起来很好,可能是3/3吗?
一。这在Knit HTML之后看起来不错,但在PDF或docx
中效果不佳<table>
<tr>
<td>Eggs</td>
<td>Ham</td>
</tr>
<tr>
<td>Basil</td>
<td>Tomato</td>
</tr>
</table>
两个。这个在Knit HTML之后看起来不错,但在PDF或docx中不太好用
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
三。这个在Knit HTML之后看起来不太好,但在PDF和docx(迄今为止最好的选项)
中表现不错V1 Tweedledee Tweedledum
-------- -------------- ----------------
Age 14 14
Height 3'2" 3'2"
Politics Conservative Conservative
Religion "New Age" Syrian Orthodox
--------- -------------- ----------------
四个。在编织HTML并制作PDF和docx(获胜者!)之后这看起来不错,但不是我之后的手动格式。
```{r table1, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
require(pander)
panderOptions('table.split.table', Inf)
set.caption("Data on cars")
pander(mtcars, style = 'rmarkdown')
```
这就是我制作PDF和docx文件的方式:
filen <- "table" # name of my RMarkdown file without suffix
knit(paste0(filen,".Rmd"))
# make PDF
system(paste0("pandoc -s ", paste0(filen,".md"), " -t latex -o ", paste0(filen,".pdf"), " --highlight-style=tango -S"))
# make docx
system(paste0("pandoc -s ", paste0(filen,".md"), " -o ", paste0(filen,".docx"), " --highlight-style=tango -S"))
答案 0 :(得分:32)
受到daroczig评论的启发,尤其是pander
转换为pandoc管道语法的线索,我仔细研究了pander
文档并找到了对cat
的引用。经过一些实验,我找到了胜利者:
```{r table2, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
tabl <- " # simple table creation here
| Tables | Are | Cool |
|---------------|:-------------:|------:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
"
cat(tabl) # output the table in a format good for HTML/PDF/docx conversion
```
在我的测试中,这会在HTML,PDF和docx中生成一致好看的表格。现在我要向其他问题提出问题,感谢他帮助我解决问题。
如果你需要一个表格的标题...... 那么你需要做一点不同的事情。请注意,标题只能在PDF中显示,而不能在HTML中显示:
```{r table-simple, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
require(pander)
panderOptions('table.split.table', Inf)
set.caption("My great data")
my.data <- " # replace the text below with your table data
Tables | Are | Cool
col 3 is | right-aligned | $1600
col 2 is | centered | $12
zebra stripes | are neat | $1"
df <- read.delim(textConnection(my.data),header=FALSE,sep="|",strip.white=TRUE,stringsAsFactors=FALSE)
names(df) <- unname(as.list(df[1,])) # put headers on
df <- df[-1,] # remove first row
row.names(df)<-NULL
pander(df, style = 'rmarkdown')
```