我有一个看起来像的数据集
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
Run Code Online (Sandbox Code Playgroud)
我想用R markdown建立一份报告; 但是,对于每个城市,我需要建立一份报告.原因是一个城市无法看到另一个城市的报告.如何为每个城市构建报告并保存PDF?
每份报告都需要中位数Score,平均值Count和平均值Returns.我知道使用dplyr我可以简单地使用
finaldat <- dat %>%
group_by(City) %>%
summarise(Score = median(Score),
Count = mean(Count) ,
Return= mean(Returns))
Run Code Online (Sandbox Code Playgroud)
但令人沮丧的是为每个人制作一份报告City.此外,这是数据的子集,而不是完整数据.也就是说,这份报告非常广泛,是一份结果报告,系统性,各自不同City.
看起来参数化报告可能就是您所需要的.看到该链接的详细信息,但基本的想法是,你在设置的参数yaml您的rmarkdown报告,并(通过例如,通过过滤数据使用该参数在报告中对其进行自定义City你的情况).然后在一个单独的R脚本中,render多次为报表,每个值一次,City作为参数传递给render函数.这是一个基本的例子:
在Rmarkdown报告中,您将声明参数yaml.Dallas在这种情况下,如果在呈现报表时未输入其他值,则列出的值仅为默认值:
---
title: My Document
output: pdf_document
params:
My_City: Dallas
---
Run Code Online (Sandbox Code Playgroud)
然后,在同一个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))
```
Run Code Online (Sandbox Code Playgroud)
然后,在一个单独的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"))
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我假设dat数据框在这个呈现的单独R脚本的全局环境中MyReport.Rmd.但是,您也可以只提供城市名称的向量,而不是从中获取名称unique(dat$City).
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |