If Column A = “Monday” AND Column B >= 17, then convert those instances in Column A to “Tuesday” AND those in Column B to 8, otherwise leave all other instances alone.

I think the best way of doing this is to create a "flag" column that identifies the rows that meet your requirements, and then use that flag to change the other two columns one at a time.

# create some data
library(tidyverse)
dat = crossing(day = c("Monday", "Tuesday", "Wednesday"),
num = seq(0,30,5))
dat
#> # A tibble: 21 x 2
#> day num
#> <chr> <dbl>
#> 1 Monday 0
#> 2 Monday 5
#> 3 Monday 10
#> 4 Monday 15
#> 5 Monday 20
#> 6 Monday 25
#> 7 Monday 30
#> 8 Tuesday 0
#> 9 Tuesday 5
#> 10 Tuesday 10
#> # ... with 11 more rows
# solution
dat$flag = dat$day == "Monday" & dat$num >= 17
dat$day = ifelse(dat$flag, "Tuesday", dat$day)
dat$num = ifelse(dat$flag, 8, dat$num)
dat$flag = NULL
dat
#> # A tibble: 21 x 2
#> day num
#> <chr> <dbl>
#> 1 Monday 0
#> 2 Monday 5
#> 3 Monday 10
#> 4 Monday 15
#> 5 Tuesday 8
#> 6 Tuesday 8
#> 7 Tuesday 8
#> 8 Tuesday 0
#> 9 Tuesday 5
#> 10 Tuesday 10
#> # ... with 11 more rows
# or do it in the tidyverse
dat |>
mutate(flag = day == "Monday" & num >= 17,
day = if_else(flag, "Tuesday", day),
num = if_else(flag, 8, num)) |>
select(-flag)

^{Created on 2021-12-14 by the reprex package (v2.0.1)}