Cách in (ra giấy) một khung dữ liệu được định dạng độc đáo


80

Tôi muốn in các khung dữ liệu được định dạng độc đáo ra giấy, lý tưởng nhất là từ trong một tập lệnh. (Tôi đang cố gắng thu thập dữ liệu bằng một công cụ và tự động xử lý và in nó bằng tập lệnh R).

Ngay bây giờ tôi có thể ghi khung dữ liệu vào tệp văn bản bằng cách sử dụng write.table(), nhưng điều này có hai vấn đề:

  1. Tệp văn bản kết quả được định dạng kém (các cột không nhất thiết phải thẳng hàng với tiêu đề của chúng) và
  2. Tôi không biết cách in một tệp văn bản từ bên trong R.

Tôi đang tìm kiếm nhiều chiến lược chung hơn là cho mã cụ thể (mặc dù mã cũng sẽ rất tuyệt!). Sweave sẽ là giải pháp thuận tiện nhất? Về nguyên tắc, tôi có thể sử dụng socketConnection()để in bằng máy in không - và nếu có, tôi có thể tìm hiểu về cách sử dụng nó ở đâu (tôi không thấy tài liệu này hữu ích lắm).


Tôi cho rằng chúng ta đang nói MS Word hay đó là một tờ giấy LaTeX?
Tyler Rinker

Bạn đã cài đặt LaTeX trên máy tính của mình chưa? Tôi đang nghĩ đến sự kết hợp của xtable, sweave (hoặc precisiontr) và có thể là cái này: liveocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/… có thể hữu ích. Nhưng điều đó có vẻ hơi phức tạp. Tôi quan tâm đến việc những người khác nghĩ ra điều này.
Dason

Tôi thực sự không muốn đặt khung dữ liệu vào một tài liệu lớn hơn - tôi chỉ muốn có một tờ giấy được in ra với khung dữ liệu dễ đọc, sau đó tôi sẽ đưa vào sổ ghi chép trong phòng thí nghiệm của mình dưới dạng bản cứng của công cụ đầu ra.
Drew Steen

Tôi chưa cài đặt LaTeX trên máy, nhưng tôi cho là tôi có thể thực hiện dễ dàng.
Drew Steen

1
% System(lpr [filename]), ít nhất là trong thế giới * nix, có thể cho phép bạn khởi động máy in từ bên trong R.
Carl Witthoft

Câu trả lời:


107

Đây là một khả năng nhanh chóng và dễ dàng sử dụng grid.tabletừ gói gridExtra:

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

nhập mô tả hình ảnh ở đây

Nếu dữ liệu của bạn không vừa trên trang, bạn có thể giảm kích thước văn bản grid.table(mtcars, gp=gpar(fontsize=8)). Điều này có thể không linh hoạt cho lắm, cũng không dễ tổng quát hóa hoặc tự động hóa.


@bdem most, làm cách nào để bạn đặt tiêu đề cho biểu đồ này dưới dạng pdf?
dùng1471980

@ user1471980, Một cách để làm điều này là grid.arrange(tableGrob(mtcars, gp=gpar(fontsize=6)), main="Main Title Here.").
bdemhest

Có cách nào để in một khung dữ liệu có số lượng hàng rất lớn không vừa trong một trang không?
Nanami

10
@Nanami, Hãy thử một cái gì đó như thế này: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()
bdem gone

1
@Masi, mtcarsđược bao gồm trong datasetsgói cài đặt R tiêu chuẩn. Nó được tải theo mặc định khi bạn bắt đầu một phiên R mới. Hãy thử gõ ?mtcarsmtcarstại dấu nhắc R để xem ý tôi là gì.
bdemhest

16

Tôi sẽ đề xuất xtablekết hợp với các tài liệu LaTeX. Hãy xem các ví dụ trong pdf này :

Bạn cũng có thể kết hợp trực tiếp điều này với Sweavehoặc knitr.


5
Xin vui lòng, không có liên kết chỉ có câu trả lời. Sẽ thật tuyệt nếu có một ví dụ mã tối thiểu với dữ liệu có thể tái tạo và đầu ra ví dụ.
Léo Léopold Hertz 준영

Tôi nghĩ rằng những lời chỉ trích nên nhắm vào người hỏi. Ông không đưa ra một ví dụ tối thiểu nào có thể tái tạo được . Lý do thông thường cho việc không chấp nhận câu trả lời chỉ liên kết dường như không áp dụng ở đây. Câu hỏi này đã có từ 7 năm trước và liên kết đến họa tiết ngồi trên CRAN xuất hiện khá ổn định.
IRTFM

9

Ngạc nhiên là không ai đề cập đến stargazergói để in dữ liệu đẹp.

Bạn có thể xuất ra một tệp văn bản đẹp mắt:

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

Hoặc thậm chí 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

Các printrgói là một lựa chọn tốt cho việc in ấn data.frames, trang trợ giúp, danh sách các họa tiết và bộ dữ liệu danh sách trong knitr tài liệu.

Từ trang tài liệu :

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
Tôi thấy đây là lựa chọn tốt nhất trong số tất cả các câu trả lời, nếu bạn đang tìm cách in khung dữ liệu ở dạng pdf được sản xuất bằng kim loại.
snd

6

Giải pháp grid.table thực sự sẽ là cách nhanh nhất để tạo PDF, nhưng đây có thể không phải là giải pháp tối ưu nếu bạn có một bảng khá dài. RStudio + domains + longtable giúp bạn dễ dàng tạo các tệp PDF có định dạng độc đáo. Những gì bạn cần là một cái gì đó như:

\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}

Xin vui lòng xem bài đăng này để biết thêm chi tiết.


Câu trả lời này sẽ tốt hơn nhiều với ví dụ tối thiểu về dữ liệu và đầu ra. Bây giờ, tôi cảm thấy nó như một câu trả lời sơ khai.
Léo Léopold Hertz 준영

5

Đối với các bảng dài / rộng, bạn có thể sử dụng pander .

Nó sẽ tự động chia các bảng dài thành các phần ngắn hơn phù hợp với trang, ví dụ: dùng nội dung chèn đoạn này vào tệp Rmd ​​của bạn:

pander::pander(mtcars)

nhập mô tả hình ảnh ở đây

Nếu bạn muốn thứ gì đó trông giống bảng Excel hơn (ngay cả với các tùy chọn chỉnh sửa trong html) thì hãy sử dụng rhandsontable . Thông tin thêm về cách sử dụng và định dạng trong họa tiết . Bạn sẽ cần phải đan Rmd của mình vào một tệp html:

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

nhập mô tả hình ảnh ở đây


4

Không lạ mắt, nhưng rất tiện dụng:

print.data.frame(iris)

1
Điều đó được hiển thị trên màn hình, nhưng không chỉ ra cách đưa điều đó lên giấy.
Brian Diggs

4

Các RStudio IDE cho một lựa chọn tốt đẹp để in ra một data.table:

  1. Mở dữ liệu trong trình xem, ví dụ: View(data_table)hoặc qua GUI
  2. Mở chế độ xem trong một cửa sổ riêng biệt (biểu tượng ở góc trên cùng bên trái: "Hiển thị trong cửa sổ mới")
  3. Cửa sổ riêng biệt hiện hỗ trợ hộp thoại in (bao gồm cả bản xem trước)

Điều này hoạt động trong RStudio V0.98.1103 (và có thể là các phiên bản mới hơn)


Có vẻ như hộp thoại in cho các cửa sổ riêng biệt đã biến mất với RStudio V0.99.
kirk

1
Bạn vẫn có thể lấy nó bằng cách nhấp chuột phải vào chế độ xem và chọn "Open Frame" (v0.99.887).
mpe

2

Tôi đã gặp câu hỏi này khi tìm cách làm điều gì đó tương tự. Tôi đã tìm thấy đề cập đến lệnh chìm ở nơi khác trên stackoverflow hữu ích trong ngữ cảnh này:

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

0

Nếu bạn muốn xuất dưới dạng png, bạn có thể làm như sau:

library(gridExtra)
png("test.png", height = 50*nrow(df), width = 200*ncol(df))
grid.table(df)
dev.off()

Nếu bạn muốn xuất dưới dạng pdf, bạn có thể làm như sau:

library(gridExtra)
pdf("test.pdf", height=11, width=10)
grid.table(df)
dev.off()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.