如何打印(到纸)格式良好的数据框

Dre*_*een 77 formatting r dataframe

我想将格式良好的数据帧打印到纸上,最好是从脚本中打印出来.(我正在尝试使用仪器收集数据并使用R脚本自动处理和打印).

现在我可以使用数据框写入文本文件write.table(),但这有两个问题:

  1. 生成的文本文件格式不正确(列不一定与其标题对齐)和
  2. 我不知道如何从R内打印文本文件.

我正在寻找一般策略而不是特定代码(尽管代码也很棒!).Sweave会是最方便的解决方案吗?原则上我可以socketConnection()用来打印到打印机 - 如果是这样,我在哪里可以学习如何使用它(我没有发现文档非常有帮助).

bde*_*est 101

使用grid.tablegridExtra包可以快速简便地使用:

library(gridExtra)
pdf("data_output.pdf", height=11, width=8.5)
grid.table(mtcars)
dev.off()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果您的数据不适合页面,则可以减小文本大小grid.table(mtcars, gp=gpar(fontsize=8)).这可能不是非常灵活,也不容易概括或自动化.

  • @Nanami,尝试这样的事情:`library(gridExtra); maxrow = 30; npages = ceiling(nrow(iris)/ maxrow); pdf("iris_pages.pdf",身高= 11,宽度= 8.5); for(i in 1:npages){idx = seq(1 +((i-1)*maxrow),i*maxrow); grid.newpage(); grid.table(iris [idx,])}; dev.off()` (10认同)

小智 16

我建议xtable结合LaTeX文档.看一下这个pdf中的例子:

你也可以直接将它与Sweave或结合起来knitr.

  • 请,没有链接只回答.拥有可重现数据和示例输出的最小代码示例会很棒. (5认同)

BLT*_*BLT 8

很惊讶没有人提到过stargazer打包数据的好方法.

您可以输出漂亮的文本文件:

stargazer(mtcars, type = 'text', out = 'out.txt')

============================================
Statistic N   Mean   St. Dev.  Min     Max  
--------------------------------------------
mpg       32 20.091   6.027   10.400 33.900 
cyl       32  6.188   1.786     4       8   
disp      32 230.722 123.939  71.100 472.000
hp        32 146.688  68.563    52     335  
drat      32  3.597   0.535   2.760   4.930 
wt        32  3.217   0.978   1.513   5.424 
qsec      32 17.849   1.787   14.500 22.900 
vs        32  0.438   0.504     0       1   
am        32  0.406   0.499     0       1   
gear      32  3.688   0.738     3       5   
carb      32  2.812   1.615     1       8   
--------------------------------------------
Run Code Online (Sandbox Code Playgroud)

甚至是HTML:

stargazer(mtcars, type = 'html', out = 'out.html')
Run Code Online (Sandbox Code Playgroud)

<table style="text-align:center"><tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Statistic</td><td>N</td><td>Mean</td><td>St. Dev.</td><td>Min</td><td>Max</td></tr>
<tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">mpg</td><td>32</td><td>20.091</td><td>6.027</td><td>10.400</td><td>33.900</td></tr>
<tr><td style="text-align:left">cyl</td><td>32</td><td>6.188</td><td>1.786</td><td>4</td><td>8</td></tr>
<tr><td style="text-align:left">disp</td><td>32</td><td>230.722</td><td>123.939</td><td>71.100</td><td>472.000</td></tr>
<tr><td style="text-align:left">hp</td><td>32</td><td>146.688</td><td>68.563</td><td>52</td><td>335</td></tr>
<tr><td style="text-align:left">drat</td><td>32</td><td>3.597</td><td>0.535</td><td>2.760</td><td>4.930</td></tr>
<tr><td style="text-align:left">wt</td><td>32</td><td>3.217</td><td>0.978</td><td>1.513</td><td>5.424</td></tr>
<tr><td style="text-align:left">qsec</td><td>32</td><td>17.849</td><td>1.787</td><td>14.500</td><td>22.900</td></tr>
<tr><td style="text-align:left">vs</td><td>32</td><td>0.438</td><td>0.504</td><td>0</td><td>1</td></tr>
<tr><td style="text-align:left">am</td><td>32</td><td>0.406</td><td>0.499</td><td>0</td><td>1</td></tr>
<tr><td style="text-align:left">gear</td><td>32</td><td>3.688</td><td>0.738</td><td>3</td><td>5</td></tr>
<tr><td style="text-align:left">carb</td><td>32</td><td>2.812</td><td>1.615</td><td>1</td><td>8</td></tr>
<tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr></table>
Run Code Online (Sandbox Code Playgroud)


jst*_*sta 7

printr包装是印刷一个不错的选择data.frames,帮助页面,小品列表和数据集列表中knitr文件.

文档页面:

options(digits = 4)
set.seed(123)
x = matrix(rnorm(40), 5)
dimnames(x) = list(NULL, head(LETTERS, ncol(x)))
knitr::kable(x, digits = 2, caption = "A table produced by printr.")
Run Code Online (Sandbox Code Playgroud)


Thu*_*usi 6

grid.table解决方案确实是创建PDF的最快方法,但如果你有一个相当长的表,这可能不是最佳解决方案.RStudio + knitr + longtable使得创建格式良好的PDF非常容易.你需要的是:

\documentclass{article}
\usepackage{longtable}
\begin{document}

<<results='asis'>>=
library(xtable)

df = data.frame(matrix(rnorm(400), nrow=100))
xt = xtable(df)
print(xt, 
      tabular.environment = "longtable",
      floating = FALSE
      )
@
\end{document}
Run Code Online (Sandbox Code Playgroud)

请参阅帖子了解更多详情.


jcl*_*use 5

不那么花哨,但非常实用:

print.data.frame(iris)
Run Code Online (Sandbox Code Playgroud)

  • 这将其显示在屏幕上,但没有显示如何将其显示在纸上。 (2认同)

epo*_*po3 5

对于长/宽表,您可以使用pander

它会自动将长表拆分为适合页面的较短部分,例如使用knitr将此块插入到您的 Rmd 文件中:

pander::pander(mtcars)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果您想要看起来更像Excel 表格的东西(即使在 html 中有编辑选项),请使用rhandsontable小插图中有关用法和格式的更多信息。你需要将你的 Rmd 编​​成一个 html 文件:

library(rhandsontable)
rhandsontable(mtcars, rowHeaders = NULL)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明