我想将精美格式的数据帧打印到纸上,最好是从脚本中打印出来。 (我正在尝试使用仪器收集数据并使用R脚本自动处理和打印)。
现在我可以使用write.table()
将数据框写入文本文件,但这有两个问题:
我正在寻找一般策略而不是特定代码(尽管代码也很棒!)。 Sweave会是最方便的解决方案吗?原则上我可以使用socketConnection()
打印到打印机 - 如果是这样,我在哪里可以了解如何使用它(我没有发现文档非常有用)。
答案 0 :(得分:98)
使用gridExtra包中的grid.table
可以快速轻松地实现这一目的:
library(gridExtra)
pdf("data_output.pdf", height=11, width=8.5)
grid.table(mtcars)
dev.off()
如果您的数据不适合页面,则可以缩小文字大小grid.table(mtcars, gp=gpar(fontsize=8))
。这可能不是很灵活,也不容易概括或自动化。
答案 1 :(得分:16)
答案 2 :(得分:7)
printr
包是在knitr文档中打印data.frames
,帮助页面,插图列表和数据集列表的理想选择。
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;
答案 5 :(得分:4)
不那么华丽,但非常功利:
print.data.frame(iris)
答案 6 :(得分:4)
RStudio IDE提供了打印data.table的另一个不错的选择:
View(data_table)
或通过GUI 这适用于RStudio V0.98.1103(可能是较新的版本)
答案 7 :(得分:3)
对于长/宽表,您可以使用pander。
它会自动将长表拆分为适合页面的较短部分,例如:使用knitr将此块插入到Rmd文件中:
pander::pander(mtcars)
如果您想要更像 Excel表格的内容(即使使用html中的编辑选项),请使用rhandsontable。有关vignette中的使用情况和格式的详细信息。 您需要将您的Rmd编织成一个html文件:
library(rhandsontable)
rhandsontable(mtcars, rowHeaders = NULL)
答案 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()