Как напечатать (на бумаге) хорошо отформатированный фрейм данных



Я хотел бы печатать красиво отформатированные фреймы данных на бумаге, в идеале из сценария. (Я пытаюсь собирать данные с помощью инструмента и автоматически обрабатывать и печатать их с помощью сценария R).



прямо сейчас я могу написать фрейм данных в текстовый файл с помощью write.table(), но это имеет две проблемы:




  1. полученный текстовый файл плохо отформатирована (столбцы не обязательно совпадают с их заголовками) и

  2. Я не знаю как печатать текст файл в р.


Я ищу больше для общих стратегий, чем для конкретного кода (хотя код тоже будет здорово!). Будет ли Sweave самым удобным решением? В принципе я могу использовать socketConnection() для печати на принтере - и если да, то где я могу узнать о том, как его использовать (я не нашел документацию очень полезной).

615   10  

10 ответов:

вот быстрая и простая возможность использования grid.table из пакета gridExtra:

library(gridExtra)
pdf("data_output.pdf", height=11, width=8.5)
grid.table(mtcars)
dev.off()

enter image description here

Если ваши данные не помещается на странице, вы можете уменьшить размер текста grid.table(mtcars, gp=gpar(fontsize=8)). Это может быть не очень гибким, или легко обобщить или автоматизировать.

Я бы предложил xtable в сочетании с документами LaTeX. Посмотрите на примеры в этом pdf:

вы также можете напрямую объединить это с Sweave или knitr.

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>

Не так причудливо, но очень утилитарно:

print.data.frame(iris)

на RStudio IDE дает еще один хороший вариант для печати данных.таблица:

  1. откройте данные в окне просмотра, например,View(data_table) или через GUI
  2. открыть в отдельном окне (иконка в верхнем левом углу: "показать в новом окне")
  3. в отдельное окно теперь поддерживает диалог печати (ВКЛ. предварительный просмотр)

это работает в RStudio V0. 98. 1103 (и, вероятно, более новые версии)

на длинные/широкие столы вы могли бы использовать пособничать.

он автоматически разделит длинные таблицы на более короткие части, которые соответствуют странице, например, используя knitr вставьте этот кусок в ваш файл Rmd:

pander::pander(mtcars)

enter image description here

Если вы хотите что-то, что выглядит как таблицы Excel (даже с параметрами редактирования в html) затем используйте rhandsontable. Дополнительная информация об использовании и форматирование в виньетка. Вам нужно будет связать свой Rmd в html-файл:

library(rhandsontable)
rhandsontable(mtcars, rowHeaders = NULL)

enter image description here

я столкнулся с этим вопросом, когда хотел сделать что-то подобное. Я нашел упоминание о команде раковины в другом месте на 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

    Ничего не найдено.