Me gustaría imprimir en papel marcos de datos con un formato agradable, idealmente desde un script. (Estoy tratando de recopilar datos usando un instrumento y procesarlos e imprimirlos automáticamente usando un script R).
Ahora mismo puedo escribir un marco de datos en un archivo de texto usando write.table()
, pero esto tiene dos problemas:
- El archivo de texto resultante tiene un formato deficiente (las columnas no necesariamente se alinean con sus encabezados) y
- No sé cómo imprimir un archivo de texto desde R.
Estoy buscando más estrategias generales que código específico (¡aunque el código también sería genial!). ¿Sería Sweave la solución más conveniente? En principio, ¿puedo usarlo socketConnection()
para imprimir en una impresora? Si es así, ¿dónde puedo aprender cómo usarlo? (No encontré la documentación muy útil).
r
dataframe
formatting
Drew Steen
fuente
fuente
% System(lpr [filename])
, al menos en el mundo * nix, puede permitirle encender la impresora desde R.Respuestas:
Aquí hay una posibilidad rápida y fácil de usar
grid.table
desde el paquete gridExtra:library(gridExtra) pdf("data_output.pdf", height=11, width=8.5) grid.table(mtcars) dev.off()
Si sus datos no caben en la página, puede reducir el tamaño del texto
grid.table(mtcars, gp=gpar(fontsize=8))
. Esto puede no ser muy flexible, ni fácil de generalizar o automatizar.fuente
grid.arrange(tableGrob(mtcars, gp=gpar(fontsize=6)), main="Main Title Here.")
.library(gridExtra); maxrow = 30; npages = ceiling(nrow(iris)/maxrow); pdf("iris_pages.pdf", height=11, width=8.5); for (i in 1:npages) {idx = seq(1+((i-1)*maxrow), i*maxrow); grid.newpage(); grid.table(iris[idx, ])}; dev.off()
mtcars
se incluye en eldatasets
paquete en una instalación R estándar. Se carga de forma predeterminada cuando inicia una nueva sesión de R. Intente escribir?mtcars
ymtcars
en el indicador R para ver a qué me refiero.Sugeriría
xtable
en combinación con documentos LaTeX. Eche un vistazo a los ejemplos en este pdf:También puede combinar esto directamente con
Sweave
oknitr
.fuente
Sorprendido, nadie ha mencionado el
stargazer
paquete para una buena impresión de datos.Puede generar un archivo de texto atractivo:
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 --------------------------------------------
O incluso 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>
fuente
El
printr
paquete es una buena opción para imprimirdata.frames
, páginas de ayuda, listas de viñetas y listas de conjuntos de datos en documentos de Knitr .Desde la página de documentación :
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.")
fuente
La solución grid.table será de hecho la forma más rápida de crear PDF, pero puede que no sea la solución óptima si tiene una tabla bastante larga. RStudio + knitr + longtable facilitan la creación de archivos PDF con un formato agradable. Lo que necesitará es algo como:
\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}
Consulte esta publicación para obtener más detalles.
fuente
Para mesas largas / anchas , puede usar pander .
Automáticamente dividirá tablas largas en partes más cortas que se ajusten a la página, por ejemplo, usando knitr inserte este fragmento en su archivo Rmd:
Si desea algo que se parezca más a tablas de Excel (incluso con opciones de edición en html), use rhandsontable . Más información sobre el uso y el formato en la viñeta . Necesitarás tejer tu Rmd en un archivo html:
library(rhandsontable) rhandsontable(mtcars, rowHeaders = NULL)
fuente
No tan elegante, pero muy utilitario:
fuente
El IDE de RStudio ofrece otra buena opción para imprimir una tabla de datos:
View(data_table)
oa través de la GUIEsto funciona en RStudio V0.98.1103 (y probablemente versiones más nuevas)
fuente
Me encontré con esta pregunta cuando buscaba hacer algo similar. Encontré una mención del comando sink en otra parte de stackoverflow que fue útil en este contexto:
sink('myfile.txt') print(mytable,right=F) sink()
fuente
Si desea exportar como png, puede hacer lo siguiente:
library(gridExtra) png("test.png", height = 50*nrow(df), width = 200*ncol(df)) grid.table(df) dev.off()
Si desea exportar como pdf, puede hacer lo siguiente:
library(gridExtra) pdf("test.pdf", height=11, width=10) grid.table(df) dev.off()
fuente