我有一个看起来像
的数据集 City Score Count Returns
Dallas 2.9 61 21
Phoenix 2.6 52 14
Milwaukee 1.7 38 7
Chicago 1.2 95 16
Phoenix 5.9 96 16
Dallas 1.9 45 12
Dallas 2.7 75 45
Chicago 2.2 75 10
Milwaukee 2.6 12 2
Milwaukee 4.5 32 0
Dallas 1.9 65 12
Chicago 4.9 95 13
Chicago 5 45 5
Phoenix 5.2 43 5
我想使用R markdown建立报告;但是,对于每个城市,我需要建立一份报告。原因是一个城市无法看到另一个城市的报告。如何为每个城市构建报告并保存PDF文件?
每份报告都需要中位数Score
,平均值Count
和平均值Returns
。我知道使用dplyr
我可以简单地使用
finaldat <- dat %>%
group_by(City) %>%
summarise(Score = median(Score),
Count = mean(Count) ,
Return= mean(Returns))
但令人沮丧的是为每个City
制作一份报告。此外,这是数据的子集,而不是完整数据。也就是说,这份报告非常广泛,是一份结果报告,系统化,每个City
都没有不同。
答案 0 :(得分:8)
看起来 parameterized report 可能就是您所需要的。有关详细信息,请参阅该链接,但基本思路是在yaml
报告的rmarkdown
中设置参数,并在报告中使用该参数对其进行自定义(例如,通过过滤数据)在你的情况下City
)。然后,在单独的R脚本中,您render
多次报告,每次City
的值,您将其作为参数传递给render
函数。这是一个基本的例子:
在Rmarkdown
报告中,您将在yaml
中声明参数。如果在呈现报告时没有输入其他值,则列出的值{在这种情况下为Dallas
只是默认值:
---
title: My Document
output: pdf_document
params:
My_City: Dallas
---
然后,在相同的Rmarkdown
文档中,您将拥有整个报告 - 无论计算取决于City
,还有对于任何City
都相同的样板文件。您可以使用params$My_City
访问参数。下面的代码会将数据框过滤为My_City
参数的当前值:
```{r}
dat %>%
filter(City==params$My_City) %>%
summarise(Score = median(Score),
Count = mean(Count) ,
Return= mean(Returns))
```
然后,在单独的R脚本中,您将执行以下操作,为每个City
生成单独的报告(我假设上面的Rmarkdown文件称为MyReport.Rmd
) :
for (i in unique(dat$City)) {
rmarkdown::render("MyReport.Rmd",
params = list(My_City = i),
output_file=paste0(i, ".pdf"))
}
在上面的代码中,我假设dat
数据框位于呈现MyReport.Rmd
的单独R脚本的全局环境中。但是,您也可以只提供城市名称向量,而不是从unique(dat$City)
获取名称。