Dre*_*een 77 formatting r dataframe
我想将格式良好的数据帧打印到纸上,最好是从脚本中打印出来.(我正在尝试使用仪器收集数据并使用R脚本自动处理和打印).
现在我可以使用数据框写入文本文件write.table()
,但这有两个问题:
我正在寻找一般策略而不是特定代码(尽管代码也很棒!).Sweave会是最方便的解决方案吗?原则上我可以socketConnection()
用来打印到打印机 - 如果是这样,我在哪里可以学习如何使用它(我没有发现文档非常有帮助).
bde*_*est 101
使用grid.table
gridExtra包可以快速简便地使用:
library(gridExtra)
pdf("data_output.pdf", height=11, width=8.5)
grid.table(mtcars)
dev.off()
Run Code Online (Sandbox Code Playgroud)
如果您的数据不适合页面,则可以减小文本大小grid.table(mtcars, gp=gpar(fontsize=8))
.这可能不是非常灵活,也不容易概括或自动化.
很惊讶没有人提到过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
--------------------------------------------
Run Code Online (Sandbox Code Playgroud)
甚至是HTML:
stargazer(mtcars, type = 'html', out = 'out.html')
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
该printr
包装是印刷一个不错的选择data.frames
,帮助页面,小品列表和数据集列表中knitr文件.
从文档页面:
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.")
Run Code Online (Sandbox Code Playgroud)
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}
Run Code Online (Sandbox Code Playgroud)
请参阅此帖子了解更多详情.
不那么花哨,但非常实用:
print.data.frame(iris)
Run Code Online (Sandbox Code Playgroud)
对于长/宽表,您可以使用pander。
它会自动将长表拆分为适合页面的较短部分,例如使用knitr将此块插入到您的 Rmd 文件中:
pander::pander(mtcars)
Run Code Online (Sandbox Code Playgroud)
如果您想要看起来更像Excel 表格的东西(即使在 html 中有编辑选项),请使用rhandsontable。小插图中有关用法和格式的更多信息。你需要将你的 Rmd 编成一个 html 文件:
library(rhandsontable)
rhandsontable(mtcars, rowHeaders = NULL)
Run Code Online (Sandbox Code Playgroud)