Ich möchte schön formatierte Datenrahmen auf Papier drucken, idealerweise aus einem Skript heraus. (Ich versuche, Daten mit einem Instrument zu sammeln und sie automatisch mit einem R-Skript zu verarbeiten und zu drucken.)
Im Moment kann ich einen Datenrahmen mit in eine Textdatei schreiben write.table()
, aber das hat zwei Probleme:
- Die resultierende Textdatei ist schlecht formatiert (Spalten müssen nicht unbedingt mit ihren Überschriften übereinstimmen) und
- Ich weiß nicht, wie ich eine Textdatei in R drucken soll.
Ich suche mehr nach allgemeinen Strategien als nach spezifischem Code (obwohl Code auch großartig wäre!). Wäre Sweave die bequemste Lösung? Im Prinzip kann ich socketConnection()
auf einem Drucker drucken - und wenn ja, wo kann ich lernen, wie man es verwendet (ich fand die Dokumentation nicht sehr hilfreich).
r
dataframe
formatting
Drew Steen
quelle
quelle
% System(lpr [filename])
Zumindest in der * nix-Welt können Sie den Drucker von R.Antworten:
Hier ist eine schnelle und einfache Möglichkeit,
grid.table
das GridExtra-Paket zu verwenden:library(gridExtra) pdf("data_output.pdf", height=11, width=8.5) grid.table(mtcars) dev.off()
Wenn Ihre Daten nicht auf die Seite passen, können Sie die Textgröße reduzieren
grid.table(mtcars, gp=gpar(fontsize=8))
. Dies ist möglicherweise nicht sehr flexibel und auch nicht einfach zu verallgemeinern oder zu automatisieren.quelle
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
istdatasets
in einer Standard-R-Installation im Paket enthalten . Es wird standardmäßig geladen, wenn Sie eine neue R-Sitzung starten. Versuchen Sie tippen?mtcars
undmtcars
an der R - Eingabeaufforderung , um zu sehen , was ich meine.Ich würde
xtable
in Kombination mit LaTeX-Dokumenten vorschlagen . Schauen Sie sich die Beispiele in diesem PDF an:Sie können dies auch direkt mit
Sweave
oder kombinierenknitr
.quelle
Überrascht hat niemand das
stargazer
Paket zum schönen Drucken von Daten erwähnt.Sie können eine gut aussehende Textdatei ausgeben:
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 --------------------------------------------
Oder sogar 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>
quelle
Das
printr
Paket ist eine gute Option zum Druckendata.frames
, für Hilfeseiten, Vignettenlisten und Datensatzlisten in Knitr- Dokumenten.Von der Dokumentationsseite :
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.")
quelle
Die grid.table-Lösung ist zwar der schnellste Weg, um PDF-Dateien zu erstellen. Dies ist jedoch möglicherweise nicht die optimale Lösung, wenn Sie eine ziemlich lange Tabelle haben. Mit RStudio + knitr + longtable können Sie ganz einfach gut formatierte PDFs erstellen. Was Sie brauchen, ist so etwas wie:
\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}
Bitte sehen Sie diesen Beitrag für weitere Details.
quelle
Nicht so schick, aber sehr nützlich:
quelle
Die RStudio-IDE bietet eine weitere nützliche Option zum Ausdrucken einer Datentabelle:
View(data_table)
oder über die GUIDies funktioniert in RStudio V0.98.1103 (und wahrscheinlich neueren Versionen)
quelle
Für lange / breite Tische können Sie Pander verwenden .
Lange Tabellen werden automatisch in kürzere Teile aufgeteilt, die zur Seite passen, z. B. mit knitr diesen Teil in Ihre Rmd-Datei einfügen:
Wenn Sie etwas möchten, das eher wie Excel-Tabellen aussieht (auch mit Bearbeitungsoptionen in HTML), verwenden Sie rhandsontable . Weitere Informationen zur Verwendung und Formatierung in der Vignette . Sie müssen Ihren Rmd in eine HTML-Datei stricken:
library(rhandsontable) rhandsontable(mtcars, rowHeaders = NULL)
quelle
Ich bin auf diese Frage gestoßen, als ich etwas Ähnliches tun wollte. Ich fand eine Erwähnung des Befehls sink an anderer Stelle im Stapelüberlauf, die in diesem Zusammenhang nützlich war:
sink('myfile.txt') print(mytable,right=F) sink()
quelle
Wenn Sie als PNG exportieren möchten, können Sie Folgendes tun:
library(gridExtra) png("test.png", height = 50*nrow(df), width = 200*ncol(df)) grid.table(df) dev.off()
Wenn Sie als PDF exportieren möchten, können Sie Folgendes tun:
library(gridExtra) pdf("test.pdf", height=11, width=10) grid.table(df) dev.off()
quelle