【问题标题】:Extract data frames within a list and print in pdf提取列表中的数据框并以 pdf 格式打印
【发布时间】:2018-04-04 11:04:12
【问题描述】:

我有一个n 数据框列表。我们将列表称为Y。 它看起来像这样:

$Profession1
Searchterm         Product            Quantity
internist          Der Internist      3
pneumo news        Pneumo News        1
der urologe        Der Urologe        5    


$Profession2
Searchterm         Product            Quantity
der nervenarzt     Der Internist      7
der kardiologe     Der Kardiologe     2
.piefel            Strahlentherapie   6
therapiedes zenker Pathophysiologie   1

.
.
.
.
.
.

$Profession(n)
Searchterm         Product            Quantity
tuberkolose        Tuberkolose        2
und notfallmedizin Notfall            3
rechtsmedizin      Rechtsmedizin      9

现在,我想在 pdf 文件的新页面上打印每个数据框。每个数据框中的记录或行数不同。我想我应该先循环遍历每个数据帧,然后循环遍历列表中数据帧中的每一行,但我不知道该怎么做。

谢谢。

【问题讨论】:

  • 您对使用 rmarkdown 感到满意吗?

标签: r loops pdf-generation


【解决方案1】:

首先,在 R 中,您不需要遍历给定表中的行。打印一个表格应该打印它的全部内容 - 一些数据框之类的结构(tibble,data.table)将只打印前几行,除非您修改一些要打印的参数,但您当然不需要遍历行.

这是我在 Rmarkdown 中的做法。

确保您在 Markdown 标题中选择了数据框打印选项:

---
title: "My Title"
author: "Me"
date: "`r format(Sys.time(), '%Y-%m-%d')`"
output:
    pdf_document:
        df_print: kable
---

导入这些以备后用

```{r}
library(purrr)
library(knitr)
```

设置您的数据

```{r}
# set up my_tables
```

为列表中的每个数据框制作打印数据框的文本表示

```{r}
out <- purrr::map_chr(
    my_tables,
    function(tt){
        knit_expand(text = "{{tt}}")
        }
    )
```

打印出数据帧的集合

`r paste(knit(out), collapse = "\n")`

如果您想在 R 内部工作,您可以多次调用 grid::grid.table 以将表格打印到 pdf:

library(grid)
pdf("my_file.pdf")
for(tt in my_tables){
  grid.table(tt)
  }
dev.off()

【讨论】:

  • 嗨,Russ,非常感谢您的帮助,但在 R 方面我只是个婴儿。因此从未使用过 Rmarkdown。有没有办法在 R 中做?
  • 感谢 Russ 抽出时间来帮助我。 :)
  • 有一些修改,是的。
  • 酷。您能否发布您的代码工作版本作为答案并accept它,请
【解决方案2】:

这是一个非 RMarkdown 解决方案:

首先,我使用 R` 中的 iris 数据集制作了一个可重复的表示例列表

tables <- list(a =  iris[1:10,], b = iris[11:20,], c = iris[21:30,])

使用gridgridExtra 包,您可以将表格创建为图形设备。 lapply 用于为列表中的每个表运行 grid.table(),所有这些都包含在函数 pdf 中,该函数将输出保存到 PDF:

library(gridExtra)
library(grid)

pdf(file = "name_of_file.pdf")
lapply(tables, function(x){
  grid.newpage()
  grid.table(x)})
dev.off()

这会产生一个多页的 PDF 文件:

进一步阅读: 在此处了解如何设置网格图形的样式:https://cran.r-project.org/web/packages/gridExtra/vignettes/tableGrob.html。您可以更改表格的颜色、格式等。

【讨论】:

  • 我尝试了您的解决方案,效果很好,但不幸的是它在我的列表中不起作用,我认为是因为数据集非常大。总行数(包括所有数据帧)约为 60,000。
  • 将我的答案与另一个中解释的方法结合起来:我的为您提供了循环多个表的结构,另一个显示了如何拆分它们。不幸的是,我无法教授 R 的所有细节
  • 非常感谢。您的解决方案有帮助:)
  • 我想进一步扩展我的问题。您能否帮助我了解如何将数据框的名称(例如,我的数据框中显示的 Profession1、Profession2)作为我的 pdf 文件中的标题每次新数据框开始时包含一次?
猜你喜欢
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 2017-03-25
相关资源
最近更新 更多