Skip to content
Coming soon: Ally. Your guide to the world of AI and R. Learn More →
R for the Rest of Us Logo

Going Deeper with R

Advanced YAML and Code Chunk Options

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: 
  html:
    toc: true
    toc-location: left
    toc-depth: 1
    fig-height: 10
    fig-width: 5
execute: 
  echo: false
  warning: false
  message: false
---

```{r}
library(tidyverse)
library(here)
library(flextable)
library(gt)
library(scales)
library(marquee)
library(ggrepel)
```

```{r}
third_grade_math_proficiency_wide <-
  read_rds(here("data/third_grade_math_proficiency_dichotomous.rds")) |>
  filter(district == "Portland SD 1J") |>
  filter(
    school %in%
      c(
        "Abernethy Elementary School",
        "Ainsworth Elementary School",
        "Alameda Elementary School",
        "Arleta Elementary School",
        "Atkinson Elementary School"
      )
  ) |>
  select(year, school, percent_proficient) |>
  arrange(school) |>
  pivot_wider(
    id_cols = school,
    names_from = year,
    values_from = percent_proficient
  )
```

![Portland Public Schools](portland-public-schools-logo.svg){width=300px fig-align="center" fig-alt="Portland Public Schools logo"}

# Introduction

This is a report on math proficiency results in [Portland Public Schools (PPS)](https://www.pps.net/). The PPS mission statement is as follows:

> We provide rigorous, high-quality academic learning experiences that are inclusive and joyful. We disrupt racial inequities to create vibrant environments for every student to demonstrate excellence.^[https://www.pps.net/about/portland-public-schools-information/overview]

## Don’t Use the Default Output

```{r}
third_grade_math_proficiency_wide
```

# Flextable

```{r}
#| tbl-cap: Math proficiency among third graders in five Portland schools

third_grade_math_proficiency_wide |>
  mutate(`2018-2019` = percent(`2018-2019`)) |>
  mutate(`2021-2022` = percent(`2021-2022`)) |>
  flextable() |>
  set_header_labels(school = "School") |>
  # align(j = 2, align = "center") |>
  # width(j = 2, 4, unit = "cm") |>
  # width(j = 3, 2, unit = "cm")
  autofit()
```

# gt

```{r}
#| tbl-cap: Math proficiency among third graders in five Portland schools

third_grade_math_proficiency_wide |>
  gt() |>
  cols_label(school = "School") |>
  cols_width(
    school ~ px(100)
  ) |>
  # cols_align(
  #   columns = `2018-2019`,
  #   align = "center"
  # ) |>
  fmt_percent(
    columns = 2:3,
    decimals = 1
  )
```

# gt interactive

```{r}
third_grade_math_proficiency_wide_full <-
  read_rds(here("data/third_grade_math_proficiency_dichotomous.rds")) |>
  filter(district == "Portland SD 1J") |>
  select(year, school, percent_proficient) |>
  arrange(school) |>
  pivot_wider(
    id_cols = school,
    names_from = year,
    values_from = percent_proficient
  )
```

```{r}
third_grade_math_proficiency_wide_full |>
  gt() |>
  cols_label(school = "School") |>
  fmt_percent(
    columns = 2:3,
    decimals = 0
  ) |>
  opt_interactive(
    use_search = TRUE,
    use_highlight = TRUE
  )
```



# Plot

```{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)

```

```{r}
theme_dk <- function() {
  theme_minimal(base_family = "Geist") +
    theme(
      axis.title = element_blank(),
      legend.position = "none",
      panel.grid = element_blank(),
      plot.title = element_marquee(width = 1),
      plot.title.position = "plot"
    )
}
```


```{r}
#| fig-alt: Chart showing growth in math proficiency for PPS schools from 2018-2019 to 2021-2022
#| fig-cap: Chart showing growth in math proficiency for PPS schools from 2018-2019 to 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() |>
  slice_max(
    order_by = growth_from_previous_year,
    n = 1
  ) |>
  pull(school)


plot_title <-
  marquee_glue(
    "{.orange **{top_growth_school}**} showed large growth 
        in math proficiency over the last two years"
  )

third_grade_math_proficiency |>
  filter(district == "Portland SD 1J") |>
  mutate(
    highlight_school = case_when(
      school == top_growth_school ~ "Y",
      .default = "N"
    )
  ) |>
  mutate(
    school = fct_relevel(
      school,
      top_growth_school,
      after = Inf
    )
  ) |>
  mutate(
    percent_proficient_formatted = percent(percent_proficient, accuracy = 1)
  ) |>
  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
    )
  ) |>
  ggplot(
    aes(
      x = year,
      y = percent_proficient,
      color = highlight_school,
      group = school,
      label = percent_proficient_formatted
    )
  ) +
  geom_line() +
  geom_text_repel(
    hjust = 0,
    lineheight = 0.9,
    direction = "x",
    family = "Geist"
  ) +
  scale_color_manual(
    values = c(
      "Y" = "orange",
      "N" = "gray80"
    )
  ) +
  scale_x_discrete(
    expand = expansion(add = c(0, 0.5))
  ) +
  scale_y_continuous(
    labels = percent_format(),
    limits = c(0, 1)
    # expand = expansion(add = c(0.1, 0.2))
  ) +
  annotate(
    geom = "text",
    x = 2.02,
    y = 0.6,
    hjust = 0,
    lineheight = 0.9,
    color = "gray70",
    label = str_glue(
      "Each gray line
    represents one
    school"
    )
  ) +
  labs(
    title = plot_title
  ) +
  theme_dk()
```

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

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

Eda Akpek

Eda Akpek • June 2, 2026

Can you post the solution? When I include TOC, the quarto document doesn't render at all

Gracielle Higino

Gracielle Higino Coach • June 25, 2026

Hi Eda! Solutions are not posted because they will vary depending on what you decide to do on your document. Do you want to share your YAML so we can try to investigate the issue?

Emma Williams

Emma Williams • August 12, 2026

The "code shown in video" section is missing.

David Keyes

David Keyes Founder • August 12, 2026

Just added it!

Course Content

44 Lessons