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

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

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

The resulting text file is poorly formatted (columns do not necessarily line up with their headings) and I don't know how to print a text file from within R.

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

 Carl Witthoft14 мая 2012 г., 20:13
% System(lpr [filename]) по крайней мере в мире * nix, может позволить вам запустить принтер изнутри R.
 Drew Steen14 мая 2012 г., 19:00
У меня нет LaTeX, установленного на машине, но я могу сделать это достаточно легко, я полагаю.
 Drew Steen14 мая 2012 г., 18:59
На самом деле я не хочу помещать фрейм данных в более крупный документ - я просто хочу иметь распечатанный лист бумаги с разборчивым фреймом данных, который я затем положу в свой лабораторный блокнот в виде бумажной копии выход инструмента.
 Tyler Rinker14 мая 2012 г., 18:51
Я предполагаю, что MS Word или LaTeX?
 Dason14 мая 2012 г., 18:53
На вашем компьютере установлен LaTeX? Я думаю о комбинации xtable, sweave (или knitr) и, возможно, об этом:livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/… может помочь. Но это кажется немного сложным. Мне интересно посмотреть, что другие придумают для этого.

Ответы на вопрос(10)

long/wide tables вы могли бы использоватьпотворствовать.

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

pander::pander(mtcars)

enter image description here

Если вы хотите что-то похожееExcel tables (даже с вариантами редактирования в HTML), затем используйтеrhandsontable, Больше информации об использовании и форматировании ввиньетка. You will need to knit your Rmd into an html file:

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

enter image description here

Решение Вопроса

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

 19 янв. 2013 г., 21:35
@ user1471980, один из способов сделать этоgrid.arrange(tableGrob(mtcars, gp=gpar(fontsize=6)), main="Main Title Here.").
 14 янв. 2013 г., 18:56
@bdemarest, как поместить заголовок этого графика в pdf?
 21 мар. 2013 г., 00:26
Есть ли способ напечатать во фрейме данных очень большое количество строк, которые не помещаются на одной странице?
 31 окт. 2016 г., 06:04
@Masi,mtcars входит вdatasets пакет в стандартной установке R. Он загружается по умолчанию при запуске нового сеанса R. Попробуйте набрать?mtcars а такжеmtcars на подсказку R, чтобы понять, что я имею в виду
 21 мар. 2013 г., 03:48
@Nanami, попробуйте что-то вроде этого: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()

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()

xtable в сочетании с документами LaTeX. Посмотрите на примеры в этомPDF:

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

 30 окт. 2016 г., 11:15
Пожалуйста, без ссылки только ответ. Было бы здорово иметь минимальный пример кода с воспроизводимыми данными и примером вывода.

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

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

RStudio IDE дает еще один хороший вариант для распечатки data.table:

Open the data in the viewer, e.g. View(data_table) or via the GUI Open the view in a seperate window (icon at the top left corner: "Show in new window") The seperate window now supports a print dialog (incl. preview)

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

 13 нояб. 2015 г., 08:32
Похоже, что диалог печати для отдельных окон исчез с RStudio V0.99.
 14 апр. 2016 г., 17:25
Вы все еще можете получить его, щелкнув правой кнопкой мыши на представлении и выбрав & quot; Открыть рамку & quot; (V0.99.887).

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}

Пожалуйста смэтот пост для более подробной информации.

 30 окт. 2016 г., 11:13
Этот ответ был бы намного лучше с минимальным примером данных и вывода. Теперь я чувствую это как тупой ответ.

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>

Не так необычно, но очень утилитарно

print.data.frame(iris)
 20 сент. 2013 г., 22:42
Это выводит его на экран, но не показывает, как получить это на бумаге.

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.")
 14 янв. 2018 г., 17:52
Я обнаружил, что это лучший вариант среди всех ответов, если вы ищете для печати фрейма данных в PDF-файле, созданном Knitr.

Ваш ответ на вопрос