Как напечатать (на бумаге) хорошо отформатированный фрейм данных
Я хотел бы печатать красиво отформатированные фреймы данных на бумаге, в идеале из сценария. (Я пытаюсь собирать данные с помощью инструмента и автоматически обрабатывать и печатать их с помощью сценария R).
прямо сейчас я могу написать фрейм данных в текстовый файл с помощью write.table(), но это имеет две проблемы:
- полученный текстовый файл плохо отформатирована (столбцы не обязательно совпадают с их заголовками) и
- Я не знаю как печатать текст файл в р.
Я ищу больше для общих стратегий, чем для конкретного кода (хотя код тоже будет здорово!). Будет ли Sweave самым удобным решением? В принципе я могу использовать socketConnection() для печати на принтере - и если да, то где я могу узнать о том, как его использовать (я не нашел документацию очень полезной).
10 ответов:
вот быстрая и простая возможность использования
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)). Это может быть не очень гибким, или легко обобщить или автоматизировать.
The
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.")
сетки.табличное решение действительно будет самым быстрым способом создания 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}Pls см. этой пост для более подробной информации.
удивлен, что никто не упомянул для хорошей печати данных.
вы можете вывести красивый текстовый файл:
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>
на RStudio IDE дает еще один хороший вариант для печати данных.таблица:
- откройте данные в окне просмотра, например,
View(data_table)или через GUI- открыть в отдельном окне (иконка в верхнем левом углу: "показать в новом окне")
- в отдельное окно теперь поддерживает диалог печати (ВКЛ. предварительный просмотр)
это работает в RStudio V0. 98. 1103 (и, вероятно, более новые версии)
на длинные/широкие столы вы могли бы использовать пособничать.
он автоматически разделит длинные таблицы на более короткие части, которые соответствуют странице, например, используя knitr вставьте этот кусок в ваш файл Rmd:
pander::pander(mtcars)Если вы хотите что-то, что выглядит как таблицы Excel (даже с параметрами редактирования в html) затем используйте rhandsontable. Дополнительная информация об использовании и форматирование в виньетка. Вам нужно будет связать свой Rmd в html-файл:
library(rhandsontable) rhandsontable(mtcars, rowHeaders = NULL)
я столкнулся с этим вопросом, когда хотел сделать что-то подобное. Я нашел упоминание о команде раковины в другом месте на stackoverflow, что было полезно в этом контексте:
sink('myfile.txt') print(mytable,right=F) sink()
Если вы хотите экспортировать в формате 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()



Comments