8

我有一个数据框,我想以有组织的方式将其写入 pdf 文件。

例如,我的 df 看起来像这样:

Date    County    Trade
1/1/2012  USA     5
1/1/2012  Japan   4
1/2/2012  USA     10
1/3/2012  Germany 15

我想按日期输出分组,在每组之后放置一个空格或换行符;

我有这段代码,但这会将所有内容打印到 pdf 文件中而不进行分组:

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

有什么想法可以最好地将这个数据集呈现在一个 pdf 文件中并按日期分组?我喜欢使用grid.Extra。有人知道如何给grid.Extra加上标题吗?

4

4 回答 4

14

此代码应该可以工作:

library(gridExtra)

df <- read.table(text = 
"1/1/2012  USA     5
1/1/2012  Japan   4
1/2/2012  USA     10
1/3/2012  Germany 15"
)
names(df) <- c("Date","Country","Trade")

EqDatedf <- as.data.frame(df[1,])
EmptyLine <- data.frame(Date = "",Country = "",Trade = "")

pdf(file = "q.pdf")

for (i in 2:nrow(df)) 
{
if (as.vector(df$Date[i])  ==  as.vector(df$Date[i-1])) 
{EqDatedf <- rbind(EqDatedf, df[i,])}

else {
EqDatedf <- rbind(EqDatedf, EmptyLine)
EqDatedf <- rbind(EqDatedf, df[i,]) 
     }
}

grid.table(EqDatedf, show.rownames = FALSE)
dev.off()

在此处输入图像描述

于 2013-01-14T15:54:43.147 回答
8

我真的建议你使用Rstudiowith Knitr。创建好的报告非常容易。

例如,

\documentclass{article}
\begin{document}
<<myTable,results='asis'>>=
library(xtable)
tab <- read.table(text = 'Date    County    Trade
1/1/2012  USA     5
1/1/2012  Japan   4
1/2/2012  USA     10
1/3/2012  Germany 15',header = TRUE)
print(xtable(tab),hline.after=c(2,3))   ## print.xtable have many smart options
@
\end{document}

在此处输入图像描述

于 2013-01-14T16:04:04.793 回答
2

截至 2017 年,R-studio 演示格式 (Markdown) 与包“pander”得到了很好的支持,并通过 Beamer 输出为 PDF。见潘德:http ://rapporter.github.io/pander/#pander-an-r-pandoc-writer

R-studio 演示代码中将数据帧打印为表格的示例:

```{r}    
pander(df)
```
于 2017-05-29T10:09:35.687 回答
1

grid.table 解决方案将是为短表格创建 PDF 的最快方法,但如果您的表格长度超过 1 页,此解决方案将无法正常工作。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}

请参阅这篇文章了解更多详情。

于 2016-01-04T20:13:20.530 回答