I would use left_join() to line up the correct values and then ifelse() to do the substitution.
library(tibble)
library(dplyr)
zeros <- tibble(CYR_Keyfield = c("C-2005-8-9-40",
"C-2005-8-11-14",
"C-2005-8-11-15",
"C-2005-8-23-24",
"C-2006-2-21-3",
"C-2006-2-21-5"))
new_ids <- tribble(
~CYR_Keyfield, ~correct,
"C-2005-8-9-40", "C-2005-8-8-40",
"C-2005-8-23-24", "C-2005-8-10-24",
"C-2006-2-21-5", "C-2006-3-30-5")
NewDF <- left_join(zeros, new_ids, by = "CYR_Keyfield")
NewDF
#> # A tibble: 6 x 2
#> CYR_Keyfield correct
#> <chr> <chr>
#> 1 C-2005-8-9-40 C-2005-8-8-40
#> 2 C-2005-8-11-14 <NA>
#> 3 C-2005-8-11-15 <NA>
#> 4 C-2005-8-23-24 C-2005-8-10-24
#> 5 C-2006-2-21-3 <NA>
#> 6 C-2006-2-21-5 C-2006-3-30-5
NewDF <- NewDF |> mutate(CYR_Keyfield = ifelse(is.na(correct), CYR_Keyfield, correct)) |>
select(-correct)
NewDF
#> # A tibble: 6 x 1
#> CYR_Keyfield
#> <chr>
#> 1 C-2005-8-8-40
#> 2 C-2005-8-11-14
#> 3 C-2005-8-11-15
#> 4 C-2005-8-10-24
#> 5 C-2006-2-21-3
#> 6 C-2006-3-30-5
Created on 2022-05-26 by the reprex package (v2.0.1)