Skip to content
R in 3 Months Starts March 13. Learn More →
R for the Rest of Us Logo

Going Deeper with R

Making Your Reports Shine: Word Edition

Transcript

Click on the transcript to go to that point in the video. Please note that transcripts are auto generated and may contain minor inaccuracies.

View code shown in video
---
title: "Portland Public Schools Math Proficiency Report"
format: 
  docx:
    reference-doc: reference-document.docx
execute: 
  echo: false
  warning: false
  message: false
editor_options: 
  chunk_output_type: console
---

```{r}
library(tidyverse)
library(fs)
library(scales)
library(ggrepel)
library(ggtext)
library(ragg)
library(here)
library(gt)
```


```{r}
third_grade_math_proficiency <- 
  read_rds(here("data/third_grade_math_proficiency.rds")) |> 
  select(academic_year, school, school_id, district, proficiency_level, number_of_students) |> 
  mutate(is_proficient = case_when(
    proficiency_level >= 3 ~ TRUE,
    .default = FALSE
  )) |> 
  group_by(academic_year, school, district, school_id, is_proficient) |> 
  summarize(number_of_students = sum(number_of_students, na.rm = TRUE)) |> 
  ungroup() |> 
  group_by(academic_year, school, district, school_id) |> 
  mutate(percent_proficient = number_of_students / sum(number_of_students, na.rm = TRUE)) |> 
  ungroup() |> 
  filter(is_proficient == TRUE) |> 
  select(academic_year, school, district, percent_proficient) |> 
  rename(year = academic_year) |> 
  mutate(percent_proficient = case_when(
    is.nan(percent_proficient) ~ NA,
    .default = percent_proficient
  )) |> 
  mutate(percent_proficient_formatted = percent(percent_proficient,
                                                accuracy = 1))
```

```{r}
theme_dk <- function() {
  
  theme_minimal(base_family = "IBM Plex Mono") +
    theme(axis.title = element_blank(),
          axis.text = element_text(color = "grey60",
                                   size = 10),
          plot.title = element_markdown(),
          plot.title.position = "plot",
          panel.grid = element_blank(),
          legend.position = "none")
  
}
```

## Chart

The chart below shows math proficiency for all PPS schools. Veniam velit adipisicing excepteur fugiat elit qui aute minim sit consequat nisi fugiat nisi ullamco ut. Nisi ut fugiat enim et incididunt sit. Aute sint sit dolor ex proident. Qui culpa mollit et tempor nostrud commodo cupidatat cupidatat sint dolor excepteur. Deserunt est do deserunt reprehenderit in dolore irure aute eu culpa ad id veniam.

```{r}
#| fig-height: 5
#| fig-alt: A line chart showing math proficiency rates among all PPS schools in 2018-2019 and 2021-2022

top_growth_school <- 
  third_grade_math_proficiency |>
  filter(district == "Portland SD 1J") |> 
  group_by(school) |> 
  mutate(growth_from_previous_year = percent_proficient - lag(percent_proficient)) |> 
  ungroup() |> 
  drop_na(growth_from_previous_year) |>
  slice_max(order_by = growth_from_previous_year,
            n = 1) |> 
  pull(school)

third_grade_math_proficiency |>
  filter(district == "Portland SD 1J") |>
  mutate(highlight_school = case_when(
    school == top_growth_school ~ "Y",
    .default = "N"
  )) |> 
  mutate(percent_proficient_formatted = case_when(
    highlight_school == "Y" & year == "2021-2022" ~ str_glue("{percent_proficient_formatted} of students
                                                             were proficient
                                                             in {year}"),
    highlight_school == "Y" & year == "2018-2019" ~ percent_proficient_formatted,
    .default = NA
  )) |> 
  mutate(school = fct_relevel(school, top_growth_school, after = Inf)) |>
  ggplot(aes(x = year,
             y = percent_proficient,
             group = school,
             color = highlight_school,
             label = percent_proficient_formatted)) +
  geom_line() +
  geom_text_repel(hjust = 0,
                  lineheight = 0.9,
                  family = "IBM Plex Mono",
                  direction = "x") +
  scale_color_manual(values = c(
    "N" = "grey90",
    "Y" = "orange"
  )) +
  scale_y_continuous(labels = percent_format()) +
  scale_x_discrete(expand = expansion(mult = c(0.05, 0.5))) +
  annotate(geom = "text",
           x = 2.02,
           y = 0.6,
           hjust = 0,
           lineheight = 0.9,
           color = "grey70",
           family = "IBM Plex Mono",
           label = str_glue("Each grey line
                            represents one school")) +
  labs(title = str_glue("<b style='color: orange;'>{top_growth_school}</b> showed large growth<br>in math proficiency over the last two years")) +
  theme_dk()
```

Your Turn

Use a reference document to change the look and feel of your report when rendered to Word.

Learn More

To learn more about how Word reference documents work, check out the Quarto website.

You can see how people have used reference documents with RMarkdown (the previous version of Quarto). There will be some minor differences, but the same concepts apply:

Have any questions? Put them below and we will help you out!

You need to be signed-in to comment on this post. Login.

Odile DOREUS

Odile DOREUS • November 25, 2024

Hello David, I am uncertain whether the reference documents is to be set up at the beginning, following the first render, or after the report is finalized in Quarto following the last render results. I also initially considered the reference document as a potential template, but now I believe it is not?

Gracielle Higino

Gracielle Higino Coach • November 26, 2024

Hi Odile! The important thing is that the word document you're using as a reference is not the same as your final report. Notice how David saves the reference document with another name, and uses it in the appropriate YAML field. The reference document is a template, and you can set it up before starting to work on your Quarto and fill it in with placeholder text. My templates usually just have the words "title", "H1", H2", ... and "text" on it, so I know how each of these elements will look like. [=

Odile DOREUS

Odile DOREUS • November 26, 2024

Ok I see. This is then a rendered Word document that one can customize by applying style features as indicated. So, the steps will be different when someone has a pre-made custom word template he/she needs to upload, right?

Gracielle Higino

Gracielle Higino Coach • November 29, 2024

Kind of! If you have a pre-made template, you also need to have this file on your Quarto project folder, and add it to the reference-doc field in your YAML.

Course Content

44 Lessons