如何打印(纸张)一个很好格式的dataframe

我想打印格式良好的dataframe,最好从脚本内。 (我试图用仪器收集数据,并使用R脚本自动处理和打印)。

现在,我可以使用write.table()将数据框写入文本文件,但这有两个问题:1.)生成的文本文件格式不正确(列不一定与其标题alignment),以及2.)我不知道如何从R打印文本文件。

我正在寻找更多的一般策略比特定的代码(虽然代码也将是伟大的!)。 Sweave会是最方便的解决scheme吗? 原则上,我可以使用socketConnection()打印到打印机 – 如果是这样,我可以在哪里学习如何使用它(我没有发现文档是非常有用的)。

谢谢。

使用gridExtra包中的grid.table ,这是一个快速简单的方法:

 library(gridExtra) pdf("data_output.pdf", height=11, width=8.5) grid.table(mtcars) dev.off() 

在这里输入图像说明

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

我会build议xtable结合LaTeX文件。 看看这个pdf中的例子:

你也可以直接结合这个Sweaveknitr

grid.table解决scheme确实是创buildPDF的最快捷方式,但如果您的表格相当长,这可能不是最佳解决scheme。 RStudio + knitr + longtable使创build格式良好的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} 

请参阅这篇文章的更多细节。

不像花式,但很实用:

 print.data.frame(iris) 

data.frames包是在knitr文档中打印data.frames ,帮助页面,小插曲列表和数据集列表的一个很好的select。

从文档页面 :

 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.") 

RStudio IDE提供了另一个很好的选项来打印data.table:

  1. 在查看器中打开数据,例如View(data_table)或通过GUI
  2. 在单独的窗口中打开视图(左上angular的图标:“在新窗口中显示”)
  3. 单独的窗口现在支持一个打印对话框(包括预览)

这适用于RStudio V0.98.1103(可能更新的版本)

惊讶的没有人提到了好的数据打印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 -------------------------------------------- 

甚至是HTML:

 stargazer(mtcars, type = 'html', out = 'out.html') 
 <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> 

当我想要做类似的事情时,我遇到了这个问题。 我发现在这个上下文中有用的在stackoverflow的其他地方提到了sink命令:

 sink('myfile.txt') print(mytable,right=F) sink() 

对于长/宽桌你可以使用pander 。

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

 pander::pander(mtcars) 

在这里输入图像说明

如果你想要的东西看起来更像Excel表格 (甚至在HTML中编辑选项),然后使用rhandsontable 。 有关使用和格式在小插曲的更多信息。 你需要把你的Rmd编成html文件:

 library(rhandsontable) rhandsontable(mtcars, rowHeaders = NULL) 

在这里输入图像说明

如果你想导出为PNG,你可以这样做:

 library(gridExtra) png("test.png", height = 50*nrow(df), width = 200*ncol(df)) grid.table(df) dev.off() 

如果你想导出为PDF,你可以这样做:

 library(gridExtra) pdf("test.pdf", height=11, width=10) grid.table(df) dev.off()