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

时间:2012-05-14 16:46:11

标签: r dataframe formatting

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

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

  1. 生成的文本文件格式不正确(列不一定与其标题对齐)和
  2. 我不知道如何从R中打印文本文件。
  3. 我正在寻找一般策略而不是特定代码(尽管代码也很棒!)。 Sweave会是最方便的解决方案吗?原则上我可以使用socketConnection()打印到打印机 - 如果是这样,我在哪里可以了解如何使用它(我没有发现文档非常有用)。

10 个答案:

答案 0 :(得分:98)

使用gridExtra包中的grid.table可以快速轻松地实现这一目的:

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

enter image description here

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

答案 1 :(得分:16)

我建议将xtable与LaTeX文档结合使用。请查看此pdf:

中的示例

您也可以将其与Sweaveknitr直接合并。

答案 2 :(得分:7)

printr包是在knitr文档中打印data.frames,帮助页面,插图列表和数据集列表的理想选择。

来自documentation page

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

答案 3 :(得分:6)

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

document

请参阅this帖子了解更多详情。

答案 4 :(得分:6)

令人惊讶的是,没有人提到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>
&#13;
&#13;
&#13;

答案 5 :(得分:4)

不那么华丽,但非常功利:

print.data.frame(iris)

答案 6 :(得分:4)

RStudio IDE提供了打印data.table的另一个不错的选择:

  1. 在查看器中打开数据,例如View(data_table)或通过GUI
  2. 在单独的窗口中打开视图(左上角的图标:“在新窗口中显示”)
  3. 单独的窗口现在支持打印对话框(包括预览)
  4. 这适用于RStudio V0.98.1103(可能是较新的版本)

答案 7 :(得分:3)

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

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

pander::pander(mtcars)

enter image description here

如果您想要更像 Excel表格的内容(即使使用html中的编辑选项),请使用rhandsontable。有关vignette中的使用情况和格式的详细信息。 您需要将您的Rmd编织成一个html文件:

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

enter image description here

答案 8 :(得分:1)

我在寻找类似的事情时遇到过这个问题。我发现在stackoverflow上提到了sink命令elsewhere,这在此上下文中很有用:

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

答案 9 :(得分:0)

如果要导出为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()