循环 Rmarkdown 中的分组 id 列并呈现 PDF
Loop over grouped id column in Rmarkdown and render PDF
我在数据集中有 2 列:id 和 text
同一 ID 存在多个文本。我的目标是通过遍历 ID 编号生成多个 PDF 文件(每个 ID 一个)。但是,我希望每个 pdf 包含 ALL 该 ID 号的文本(使用 knitr::kable()
的 table 格式)
这是我拥有的 .Rmd 文件的可重现样本:
---
title: "Loop over grouped IDs"
output:
pdf_document:
latex_engine: xelatex
params:
id: i
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, include= FALSE)
library(tidyverse)
df <- tibble(
text = c(
"text one for id#1",
"text two for id#1",
"text one for id#12",
"text one for id#13",
"text two for id#13",
"text three for id#13",
"text one for id#15",
"text two for id#15"
),
id = c(1, 1, 12, 13, 13, 13, 15, 15)
)
df_id_filtered <- df %>% filter(id == params$id)
```
## Hello ID\#`r df_id$id[i]`!
These are the collections of texts that belong to you
```{r, echo=FALSE, results='asis'}
texts <- df_id_filtered$text
table <- knitr::kable(texts, col.names = "text")
```
`r table`
我为循环代码创建了一个 .R 脚本,如下所示:
library(rmarkdown)
library(knitr)
# loop through the id rows in the filtered data frame and generate a pdf report for each ID with all the texts in the "text" column for that ID
for (i in seq_along(df_id_filtered)) {
rmarkdown::render(input = "idText.Rmd",
params = list(id = i),
output_format = "pdf_document",
output_file = paste0("File", "_", "ID#", i, ".pdf"))
}
循环是如何链接到 params: id
的?
如果我遍历整个 df
而不是 df_id_filtered
那么相同 ID 号的文本将在不同的文件中。
这里seq_along()
是正确的选择吗? params = list()
中应该包含什么?
我的代码有效,但它对整个唯一 ID(仅对其中的 2 个)运行无效。
非常感谢任何帮助!谢谢!
如果您想遍历所有 ID
,我认为 seq_along(df_id_filtered)
不是正确的选择。 df_id_filtered
是数据框,seq_along
会遍历列。由于您的数据中有 2 列,因此它仅针对 2 个 ID 运行。
您可以试试 -
library(rmarkdown)
library(knitr)
for (i in unique(df$id)) {
rmarkdown::render(input = "idText.Rmd",
params = list(id = i),
output_format = "pdf_document",
output_file = paste0("File", "_", "ID#", i, ".pdf"))
}
所以在这里我们遍历数据中的每个 unique
id
并为它写一个 pdf。
我在数据集中有 2 列:id 和 text
同一 ID 存在多个文本。我的目标是通过遍历 ID 编号生成多个 PDF 文件(每个 ID 一个)。但是,我希望每个 pdf 包含 ALL 该 ID 号的文本(使用 knitr::kable()
的 table 格式)
这是我拥有的 .Rmd 文件的可重现样本:
---
title: "Loop over grouped IDs"
output:
pdf_document:
latex_engine: xelatex
params:
id: i
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, include= FALSE)
library(tidyverse)
df <- tibble(
text = c(
"text one for id#1",
"text two for id#1",
"text one for id#12",
"text one for id#13",
"text two for id#13",
"text three for id#13",
"text one for id#15",
"text two for id#15"
),
id = c(1, 1, 12, 13, 13, 13, 15, 15)
)
df_id_filtered <- df %>% filter(id == params$id)
```
## Hello ID\#`r df_id$id[i]`!
These are the collections of texts that belong to you
```{r, echo=FALSE, results='asis'}
texts <- df_id_filtered$text
table <- knitr::kable(texts, col.names = "text")
```
`r table`
我为循环代码创建了一个 .R 脚本,如下所示:
library(rmarkdown)
library(knitr)
# loop through the id rows in the filtered data frame and generate a pdf report for each ID with all the texts in the "text" column for that ID
for (i in seq_along(df_id_filtered)) {
rmarkdown::render(input = "idText.Rmd",
params = list(id = i),
output_format = "pdf_document",
output_file = paste0("File", "_", "ID#", i, ".pdf"))
}
循环是如何链接到 params: id
的?
如果我遍历整个 df
而不是 df_id_filtered
那么相同 ID 号的文本将在不同的文件中。
这里seq_along()
是正确的选择吗? params = list()
中应该包含什么?
我的代码有效,但它对整个唯一 ID(仅对其中的 2 个)运行无效。
非常感谢任何帮助!谢谢!
如果您想遍历所有 ID
,我认为 seq_along(df_id_filtered)
不是正确的选择。 df_id_filtered
是数据框,seq_along
会遍历列。由于您的数据中有 2 列,因此它仅针对 2 个 ID 运行。
您可以试试 -
library(rmarkdown)
library(knitr)
for (i in unique(df$id)) {
rmarkdown::render(input = "idText.Rmd",
params = list(id = i),
output_format = "pdf_document",
output_file = paste0("File", "_", "ID#", i, ".pdf"))
}
所以在这里我们遍历数据中的每个 unique
id
并为它写一个 pdf。