Як надрукувати (на папері) приємно відформатований кадр даних


80

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

Зараз я можу записати фрейм даних у текстовий файл за допомогою write.table(), але це має дві проблеми:

  1. Отриманий текстовий файл погано відформатований (стовпці не обов'язково вирівнюються за заголовками) та
  2. Я не знаю, як надрукувати текстовий файл всередині R.

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


Ми говоримо про MS Word, припускаю, чи це стаття LaTeX?
Тайлер Рінкер,

Чи встановлено на вашому комп’ютері LaTeX? Я думаю, що може допомогти комбінація xtable, sweave (або в’язальниці) і, можливо, це: livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/… . Але це здається трохи складним. Мені цікаво подивитися, що інші придумують для цього.
Дейсон

Я насправді не хочу розміщувати кадр даних у більшому документі - я просто хочу мати роздрукований аркуш паперу з розбірливим кадром даних, який я потім вкладу в свій лабораторний блокнот як друкований запис вихід приладу.
Дрю Стін,

У мене не встановлено LaTeX на машині, але я думаю, я можу зробити це досить легко.
Дрю Стін,

1
% System(lpr [filename]), принаймні у світі * nix, може дозволити вам запустити принтер зсередини R.
Carl Witthoft

Відповіді:


107

Ось швидка і проста можливість використання 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)). Це може бути не дуже гнучко, ані легко узагальнити чи автоматизувати.


@bdemarest, як ви розміщуєте заголовок цього графіку у форматі PDF?
user1471980

@ user1471980, Один із способів зробити це grid.arrange(tableGrob(mtcars, gp=gpar(fontsize=6)), main="Main Title Here.").
bdemarest

Чи є спосіб надрукувати фрейм даних із дуже великою кількістю рядків, які не вміщуються лише на одній сторінці?
Нанамі

10
@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()
bdemarest

1
@Masi, mtcarsвходить до datasetsкомплекту стандартної установки R. Він завантажується за замовчуванням під час запуску нового сеансу R. Спробуйте набрати текст ?mtcarsі mtcarsпідказкою R, щоб зрозуміти, що я маю на увазі.
bdemarest

16

Я б запропонував xtableу поєднанні з документами LaTeX. Погляньте на приклади в цьому pdf:

Ви також можете безпосередньо поєднати це з Sweaveабо knitr.


5
Будь ласка, жодне посилання не відповідає. Було б чудово мати мінімальний приклад коду з відтворюваними даними та прикладом виводу.
Лео Леопольд Герц,

Я думаю, що критика повинна бути спрямована на допитувача. Він не запропонував жодного мінімального відтворюваного прикладу . Звичайне обґрунтування неприйняття відповідей лише на посилання, схоже, тут не застосовується. Цьому питанню 7 років, і посилання на віньєтку, розміщену в CRAN, виглядає досить стабільним.
IRTFM

9

Здивований, ніхто не згадав про це 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

Цей printrпакет є хорошим варіантом для друку data.frames, сторінок довідки, списків віньєток та списків наборів даних у в'язальних документах.

На сторінці документації :

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.")

1
Я виявив, що це найкращий варіант серед усіх відповідей, якщо ви шукаєте друк фрейму даних у PDF-файлі, виготовленому в'язальницею.
snd

6

Рішення grid.table справді буде найшвидшим способом створення PDF, але це може бути не оптимальним рішенням, якщо у вас досить довга таблиця. RStudio + в'язальник + довгий стіл дозволяють досить легко створювати красиво відформатовані 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}

Будь ласка, перегляньте цю публікацію для більш детальної інформації.


Ця відповідь була б набагато кращою з мінімальним прикладом даних та результатів. Зараз я це відчуваю як тупу відповідь.
Лео Леопольд Герц,

5

Для довгих / широких столів ви можете використовувати пандер .

Він автоматично розділить довгі таблиці на коротші частини, які відповідають сторінці, наприклад, за допомогою в'язального апарата вставте цей шматок у свій Rmd-файл:

pander::pander(mtcars)

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

Якщо ви хочете щось більше схоже на таблиці Excel (навіть з параметрами редагування в html), використовуйте rhandsontable . Більше інформації про використання та форматування у віньєтці . Вам потрібно буде зв’язати ваш Rmd у файл html:

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

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


4

Не такий вигадливий, але дуже корисний:

print.data.frame(iris)

1
Це відображає його на екрані, але не показує, як отримати це на папері.
Brian Diggs

4

RStudio IDE дає ще один хороший варіант , щоб роздрукувати data.table:

  1. Відкрийте дані у засобі перегляду, наприклад View(data_table)або через графічний інтерфейс
  2. Відкрийте подання в окремому вікні (піктограма у верхньому лівому куті: "Показати в новому вікні")
  3. Окреме вікно тепер підтримує діалогове вікно друку (включаючи попередній перегляд)

Це працює в RStudio V0.98.1103 (і, можливо, новіших версіях)


Схоже, діалогове вікно друку для окремих вікон з RStudio V0.99 не існує.
kirk

1
Ви все ще можете отримати його, клацнувши правою кнопкою миші на поданні та вибравши "Відкрити кадр" (v0.99.887).
mpe

2

Я зіткнувся з цим питанням, коли прагнув зробити щось подібне. Я знайшов згадку про команду sink в іншому місці на stackoverflow, яка була корисною в цьому контексті:

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

0

Якщо ви хочете експортувати у форматі 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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.