如何将格式正确的数据框打印(打印到纸上)


79

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

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

  1. 产生的文本文件格式不正确(列不一定与其标题对齐),并且
  2. 我不知道如何从R中打印文本文件。

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


我是在说MS Word,还是LaTeX论文?
泰勒·林克

您的计算机上安装了LaTeX吗?我在考虑将xtable,sweave(或knitr)组合在一起,并可能这样做:livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp / ...可能会有所帮助。但这似乎有点复杂。我有兴趣了解其他人对此提出的建议。
戴森2012年

我实际上并不希望将数据框放入更大的文档中-我只想打印出一张带有清晰数据框的纸,然后将其作为笔录的硬拷贝记录放入实验室笔记本中。仪器输出。
德鲁·斯蒂恩

我没有在计算机上安装LaTeX,但我想可以轻松完成。
德鲁·斯蒂恩

1
% System(lpr [filename]),至少在* nix的世界,可以让你火起来从内R.打印机
卡尔Witthoft

Answers:


107

这是使用grid.tablegridExtra包提供的一种快速简便的方法:

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

在此处输入图片说明

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


@bdemarest,您如何在pdf中为该图添加标题?
user1471980

@ user1471980,一种方法是grid.arrange(tableGrob(mtcars, gp=gpar(fontsize=6)), main="Main Title Here.")
bdemarest 2013年

有没有一种方法可以打印出数据量很大的行,而这些行又不能容纳在一页中?
Nanami

10
@ Nanami,尝试这样的事情:library(gridExtra); maxrow = 30; npages = ceiling(nrow(iris)/maxrow); pdf("iris_pages.pdf", height=11, width=8.5); for (i in 1:npages) {idx = seq(1+((i-1)*maxrow), i*maxrow); grid.newpage(); grid.table(iris[idx, ])}; dev.off()
bdemarest 2013年

1
@Masi,mtcars包含在datasets标准R安装的软件包中。当您开始新的R会话时,默认情况下将其加载。尝试输入,?mtcars然后mtcars在R提示符下查看我的意思。
bdemarest,

16

我建议xtable结合使用LaTeX文档。看看这个pdf中的示例

您也可以将其直接与Sweave或组合knitr


5
请,没有链接只能回答。拥有一个可重现的数据和示例输出的最小代码示例将是很棒的。
莱奥波德·赫兹(LéoLéopoldHertz),2016年

我认为批评应该直接针对提问者。他没有提供可重复的最小实例。不接受仅链接的答案的通常理由似乎在这里并不适用。这个问题已有7年历史了,与CRAN定位的小插图的链接似乎很稳定。
IRTFM

9

惊讶的是没有人提到 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>


7

printr软件包是data.framesknitr文档中打印,帮助页面,小插图列表和数据集列表的不错选择。

文档页面

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

1
我发现这是所有答案中的最佳选择,如果您正在寻找用编织机生成的pdf打印数据框的话。
SND

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}

请参阅帖子以获取更多详细信息。


用最少的数据和输出示例,这个答案会好得多。现在,我觉得这是一个简单的答案。
莱奥波德·赫兹(LéoLéopoldHertz),2016年

4

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

print.data.frame(iris)

1
那会在屏幕上显示出来,但是没有显示如何将其显示在纸上。
Brian Diggs

4

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

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

这在RStudio V0.98.1103(可能是更新的版本)中有效


RStudio V0.99似乎没有单独窗口的打印对话框。
2015年

1
您仍然可以通过右键单击视图并选择“打开框架”(v0.99.887)来获得它。
mpe

4

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

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

pander::pander(mtcars)

在此处输入图片说明

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

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

在此处输入图片说明


2

当我想做类似的事情时,我遇到了这个问题。我发现在stackoverflow的其他地方提到过接收器命令,在这种情况下非常有用:

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

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()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.