【问题标题】:writing data frame to pdf table将数据框写入 pdf 表
【发布时间】:2013-01-14 15:14:07
【问题描述】:

我有一个数据框,我想以有组织的方式将其写入 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 加上标题吗?

【问题讨论】:

  • 最好的方法是学习一些 LaTeX,并使用 R 的 LaTeX 工具,如 Sweave/knitr 或包 xtableHmisc .

标签: r


【解决方案1】:

这段代码应该可以工作:

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

【讨论】:

  • 谢谢你,这很棒。如何给这个表添加标题?
  • 似乎show.rownames 不再有效。使用rows=NULL 删除行名。
【解决方案2】:

我真的建议您将RstudioKnitr 一起使用。创建好的报告非常容易。

例如,

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

【讨论】:

  • 欣赏代码。我喜欢在这个项目中使用 grid.Extra,因为它速度很快,我现在就需要它。你熟悉给 grid.Table 放置标题吗?
  • @user1471980 您是否要求基于gtable 包的解决方案?我真的不明白与我的答案有什么关系。你能更准确地说你想要什么吗?
  • 我正在尝试为 grid.table 提供的输出添加标题。我不知道该怎么做?
  • 你可以使用类似grid.text('My Title',y=0.8)的东西。
  • @user1471980 使用巴蒂斯特命题,更好。
【解决方案3】:

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

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

```{r}    
pander(df)
```

【讨论】:

    【解决方案4】:

    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}
    

    请参阅this 帖子了解更多详情。

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多