Jak wydrukować (na papier) ładnie sformatowaną ramkę danych
Chciałbym wydrukować ładnie sformatowane ramki danych na papier, najlepiej ze skryptu. (Staram się zbierać dane za pomocą instrumentu i automatycznie przetwarzać i drukować je za pomocą skryptu R).
W tej chwili mogę zapisać ramkę danych do pliku tekstowego używając write.table()
, ale to ma dwa problemy:
- wynikowy plik tekstowy jest źle sformatowany (kolumny niekoniecznie pasują do swoich nagłówków) i
- Nie wiem jak wydrukować plik tekstowy z wewnątrz R.
Szukam bardziej ogólnych strategii niż konkretnego kodu (chociaż kod też byłby świetny!). Czy Sweave będzie najwygodniejszym rozwiązaniem? W zasadzie mogę użyć socketConnection()
do wydruku na drukarce - a jeśli tak, to gdzie mogę dowiedzieć się, jak z niej korzystać (dokumentacja nie była zbyt pomocna).
10 answers
Oto szybka i łatwa możliwość użycia grid.table
z pakietu gridExtra:
library(gridExtra)
pdf("data_output.pdf", height=11, width=8.5)
grid.table(mtcars)
dev.off()
Jeśli Twoje dane nie mieszczą się na stronie, możesz zmniejszyć rozmiar tekstu grid.table(mtcars, gp=gpar(fontsize=8))
. Może to nie być bardzo elastyczne, ani łatwe do uogólnienia lub zautomatyzowania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 17:31:50
Sugerowałbym xtable
w połączeniu z dokumentami LaTeX. Zobacz przykłady w tym pdf:
Można też bezpośrednio połączyć to z Sweave
lub knitr
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-13 15:45:39
The printr
Pakiet jest dobrym rozwiązaniem do drukowania data.frames
, stron pomocy, list winiet i list zbiorów danych w dokumentach 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.")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-04 14:36:51
Siatka.rozwiązanie tabeli będzie rzeczywiście najszybszym sposobem tworzenia plików PDF, ale może to nie być optymalne rozwiązanie, jeśli masz dość długi stół. RStudio + knitr + longtable ułatwia tworzenie ładnie sformatowanych plików PDF. To czego potrzebujesz to coś w stylu:
\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}
Pls Zobacz Ten Po Więcej Szczegółów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-02 19:47:06
Dziwi mnie, że nikt nie wspomniał o stargazer
pakiecie do ładnego drukowania danych.
Możesz wypisać ładny plik tekstowy:
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
--------------------------------------------
Lub nawet 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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-24 17:26:36
Nie tak fantazyjne, ale bardzo utylitarne:
print.data.frame(iris)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-20 18:09:53
RStudio IDE daje kolejną ładną opcję wydruku danych.Tabela:
- Otwórz dane w przeglądarce, np.
View(data_table)
lub poprzez GUI - Otwórz widok w oddzielnym oknie (ikona w lewym górnym rogu: "Pokaż w nowym oknie")
- oddzielne okno obsługuje teraz okno drukowania (w tym. podgląd)
To działa w RStudio V0.98. 1103 (i prawdopodobnie nowsze wersje)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 14:37:56
Do długich/szerokich tabel możesz użyć pander .
Automatycznie podzieli długie tabele na krótsze części pasujące do strony, np. za pomocą knitr Wstaw ten fragment do pliku Rmd:
pander::pander(mtcars)
Jeśli chcesz coś, co wygląda bardziej jak tabele Excela (nawet z opcjami edycji w html), użyj rhandsontable . Więcej informacji o użyciu i formatowaniu w winiecie . Będziesz musiał zrobić na drutach Twoje Rmd do pliku html:
library(rhandsontable)
rhandsontable(mtcars, rowHeaders = NULL)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 16:34:12
Natknąłem się na to pytanie, gdy chciałem zrobić coś podobnego. Znalazłem wzmiankę o poleceniu sink gdzie indziej {[3] } na stackoverflow, która była przydatna w tym kontekście:
sink('myfile.txt')
print(mytable,right=F)
sink()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:24
Jeśli chcesz eksportować jako png, możesz zrobić tak:
library(gridExtra)
png("test.png", height = 50*nrow(df), width = 200*ncol(df))
grid.table(df)
dev.off()
Jeśli chcesz wyeksportować plik pdf, możesz to zrobić w następujący sposób:
library(gridExtra)
pdf("test.pdf", height=11, width=10)
grid.table(df)
dev.off()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-27 14:04:55