Import your data

# csv file
data <- read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2025/2025-07-01/weekly_gas_prices.csv')
## Rows: 22360 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (3): fuel, grade, formulation
## dbl  (1): price
## date (1): date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Chapter 14

Tools

Detect matches

data$grade %>%
head(10)
##  [1] "regular" "regular" "regular" "regular" "regular" "regular" "regular"
##  [8] "regular" "regular" "regular"
str_detect(data$grade, "premium") %>%
head(10)
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
sum(str_detect(data$grade, "premium"))
## [1] 4788
data %>%
    summarise(num_premium = sum(str_detect(grade, "premium"))) %>%
head(10)
## # A tibble: 1 × 1
##   num_premium
##         <int>
## 1        4788

Extract matches

data %>%
    mutate(col_premium = str_extract(grade, "premium")) %>%
    select(grade, "col_premium") %>%
    filter(!is.na(col_premium)) %>%
    print(n = 10)
## # A tibble: 4,788 × 2
##    grade   col_premium
##    <chr>   <chr>      
##  1 premium premium    
##  2 premium premium    
##  3 premium premium    
##  4 premium premium    
##  5 premium premium    
##  6 premium premium    
##  7 premium premium    
##  8 premium premium    
##  9 premium premium    
## 10 premium premium    
## # ℹ 4,778 more rows

Replacing matches

data %>%
    mutate(col_91 = str_replace(grade, "Premium", "91")) %>%
    select(grade, col_91) %>%
    print(n = 10)
## # A tibble: 22,360 × 2
##    grade   col_91 
##    <chr>   <chr>  
##  1 regular regular
##  2 regular regular
##  3 regular regular
##  4 regular regular
##  5 regular regular
##  6 regular regular
##  7 regular regular
##  8 regular regular
##  9 regular regular
## 10 regular regular
## # ℹ 22,350 more rows