81

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

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

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

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

4

10 回答 10

108

grid.table这是使用gridExtra 包的一种快速简便的方法:

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

在此处输入图像描述

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

于 2012-05-14T17:31:50.363 回答
16

我建议xtable结合 LaTeX 文档。看看这个pdf中的例子:

您也可以直接将其与Sweaveor结合使用knitr

于 2012-05-14T16:55:17.067 回答
10

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

于 2016-10-24T17:26:36.830 回答
7

该软件包是在knitr文档中打印、帮助页面、小插图列表和数据集列表printr的不错选择。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.")
于 2015-07-04T13:45:05.853 回答
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}

请参阅这篇文章了解更多详情。

于 2016-01-02T19:47:06.557 回答
5

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

print.data.frame(iris)
于 2013-09-20T18:09:53.083 回答
5

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

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

pander::pander(mtcars)

在此处输入图像描述

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

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

在此处输入图像描述

于 2017-01-03T16:34:12.803 回答
4

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

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

这适用于 RStudio V0.98.1103(可能还有更新的版本)

于 2015-08-12T14:37:56.723 回答
2

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

sink('myfile.txt')
print(mytable,right=F)
sink()
于 2016-02-27T21:50:03.247 回答
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()
于 2017-07-27T14:04:55.120 回答