从pdf中的R markdown旋转表格

sus*_*sus 16 r knitr r-markdown

我在R Markdown写作并且有一个非常广泛的列联表.我正在使用pandoc将R markdown文档转换为PDF.

是否可以旋转或收缩桌子?理想情况下,这可以在不必切换到LaTeX格式的情况下完成.

我的尝试:

我一直在滥用knitr中的数字选项来尝试这个,但无论我使用kable还是xtable,我都没有运气.我尝试过的一些排列包括:

```{r out.extra='angle=90', results='asis'}
library(knitr)
kable(iris[1:5,])
``` 

``{r size='footnotesize', results='asis'}
library(knitr)
kable(iris[1:5,])
```

```{r out.extra='angle=90', results='asis'}
library(xtable)
xtable(iris[1:5,])
```

```{r size='footnotesize', results='asis'}
library(xtable)
xtable(iris[1:5,])
```  
Run Code Online (Sandbox Code Playgroud)

所有这些都很好地显示了表格,但不要旋转它.

我用来编织的代码是:

Rscript -e "library(knitr); knit('table.Rmd', 'table.md')"
Run Code Online (Sandbox Code Playgroud)

并转换为pdf:

pandoc table.md -o table.pdf
Run Code Online (Sandbox Code Playgroud)

Mic*_*per 9

out.extra='angle=90'仅适用于数字,可惜不表.以下是几种可能的方法:

KableExtra(旋转页面)

您可以使用有用的插件包轻松旋转表格kableExtra.具体来说,该landscape()功能将表放在单个横向页面上.它对于无法在纵向页面上打印的宽表格很有用.

library(kableExtra)

kable(iris[1:5,],
      format = "latex", booktabs = TRUE) %>%
  kableExtra::landscape()
Run Code Online (Sandbox Code Playgroud)

这些功能的局限在于它会强制生成一个新页面,因此根据表格的大小,它可能会留下一些空白.

KableExtra(比例宽度)

您可以使用该函数缩放表格的宽度kable_styling(latex_options = "scale_down").这将强制表格到页面的宽度.

   kable(iris[1:5,],
          format = "latex", booktabs = TRUE) %>%
          kable_styling(latex_options = "scale_down")
Run Code Online (Sandbox Code Playgroud)

有关kableExtra软件包的更多示例,请查看此处的软件包:https://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf

观星者(旋转表)

还有其他选择,但这些选项主要需要安装额外的LaTeX软件包.例如,stargazer包可以使用float.env参数以横向方式打印表:

```{r, results="asis"}
stargazer(iris[1:5,], 
          float.env = "sidewaystable")
```
Run Code Online (Sandbox Code Playgroud)

这需要\usepackage{dcolumn}在LaTeX前言中

在此处阅读有关自定义LaTex前言的更多信息:https://tex.stackexchange.com/questions/171711/how-to-include-latex-package-in-r-markdown

  • 我在寻找如何使用 knitr 和 stargazer 实现 sidewaystables 时首先遇到了这个解决方案,但无法使用 `\usepackage{dcolumn}` 让它工作。相反,我在这个回复中发现我必须使用 `\usepackage{rotating}`:/sf/answers/2400460471/ (2认同)

Hil*_*ers 0

你可以只使用 t() 吗?

library(xtable)
xtable(t(iris[1:5,]))
Run Code Online (Sandbox Code Playgroud)

如果您的表格仍然太长,请将其分成多个表格。例如:

splits = floor(seq(1, ncol(iris), length=5))
for(i in 2:length(splits)){
 mini.tab = iris[ , splits[i-1]:splits[i]]
 xtable(mini.tab)
}
Run Code Online (Sandbox Code Playgroud)