2012-05-14 79 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()