Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Вот быстрая и простая возможность использовать 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)). Это может быть не очень гибким, легким для обобщения или автоматизации.

Ответ 2

Я предлагаю xtable в сочетании с документами LaTeX. Взгляните на примеры в этом pdf:

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

Ответ 3

Решение grid.table действительно будет самым быстрым способом создания 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}

Подробнее см. .

Ответ 4

Не как фантазия, а очень утилитарная:

print.data.frame(iris)

Ответ 5

Пакет 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.")

Ответ 6

Удивленный никто не упомянул пакет stargazer для приятной печати данных.

Вы можете вывести красивый текстовый файл:

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>

Ответ 7

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

  • Откройте данные в средстве просмотра, например. View(data_table) или через графический интерфейс
  • Открыть представление в отдельном окне (значок в левом верхнем углу: "Показать в новом окне" )
  • В отдельном окне теперь поддерживается диалоговое окно печати (включая предварительный просмотр).

Это работает в RStudio V0.98.1103 (и, возможно, более поздних версиях)

Ответ 8

Я столкнулся с этим вопросом, когда хотел сделать что-то подобное. Я нашел упоминание команды раковины в другом месте в stackoverflow, которая была полезна в этом контексте:

sink('myfile.txt')
print(mytable,right=F)
sink()

Ответ 9

В длинных/широких таблицах вы можете использовать pander.

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

pander::pander(mtcars)

введите описание изображения здесь

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

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

введите описание изображения здесь

Ответ 10

Если вы хотите экспортировать как 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()