2012-05-14 45 views
70

我想打印格式良好的数据帧至纸张,理想情况下是从脚本内打印。 (我正在尝试使用仪器收集数据,并使用R脚本自动处理和打印它)。如何打印(纸张)格式良好的数据帧

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

  1. 所得到的文本文件格式不(列不一定与他们的标题排队)和
  2. 我不知道如何从内部R.

我期待更多的比的特定代码的一般策略打印文本文件(尽管代码将是巨大的!)。 Sweave会是最方便的解决方案吗?原则上,我可以使用socketConnection()打印到打印机 - 如果是这样,我可以在哪里了解如何使用它(我没有发现文档非常有用)。

+0

我们在说MS Word我认为还是它是一个乳胶纸? –

+0

您的计算机上是否安装了LaTeX?我正在考虑xtable,sweave(或knitr)的组合,以及可能的情况:http://livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Acrobat10_SDK_HTMLHelp&file = DevFAQ_UnderstandingSDK.22.31.html可能会有帮助。但是这似乎有点复杂。我很想看看其他人为此提出的。 – Dason

+0

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

回答

93

这里是一个快速且易于使用的可能性从grid.table的gridExtra包:

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))。这可能不是非常灵活,也不容易概括或自动化。

+0

@bdemarest,你如何把这个图表的标题放在pdf中? – user1471980

+0

@ user1471980,这样做的一种方法是grid.arrange(tableGrob(mtcars,gp = gpar(fontsize = 6)),main =“Main Title Here。”)。 – bdemarest

+0

有没有办法打印一个数据帧有很多行不适合在一个页面中? – Nanami

16

我建议xtable结合LaTeX文件。看看这个例子吧pdf:

你也可以直接把它与Sweaveknitr结合起来。

+4

请仅链接回答。具有可重现数据和示例输出的最小代码示例是非常好的。 –

4

不是幻想,但很功利:

print.data.frame(iris) 
+1

它可以在屏幕上显示,但不会显示如何将其粘贴到纸上。 –

5

printr包是打印data.frames,帮助页面,小品列表和数据集列表中knitr文档的合适选择。

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

我发现这是所有答案中的最佳选择,如果您正在寻找以knitr制作的pdf格式打印数据框。 – snd

2

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

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

这个工作在RStudio V0.98.1103(也可能是新版本)

+0

它看起来像RStudio V0.99一样,独立窗口的打印对话框消失了。 – kirk

+0

您仍然可以通过右键单击该视图并选择“Open Frame”(v0.99.887)来获取它。 – mpe

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} 

请参见this后的更多细节。

+0

以数据和输出的最小例子来说,这个答案会好得多。现在,我觉得它是一个存根答案。 –

1

我在找类似的东西时遇到了这个问题。我发现计算器水槽命令elsewhere的提到,在这种情况下非常有用:

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

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

2

对于长/宽表你可以使用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

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()