The character ^ is used in regular expressions to designate the beginning of the text. If you want to search for a literal ^, you have to escape it with backslashes. Are the following results what you want?
library(tidyverse)
#> Warning: package 'tibble' was built under R version 4.1.2
df <- tibble(col1 = c("^GSPC", "^IXIC", "^DJI"),
col2 = c(1, 2, 3))
dplyr::mutate_if(df,
is.character,
stringr::str_replace_all,
pattern = "\\^",
replacement = "")
#> # A tibble: 3 x 2
#> col1 col2
#> <chr> <dbl>
#> 1 GSPC 1
#> 2 IXIC 2
#> 3 DJI 3
dplyr::mutate_if(df,
is.character,
stringr::str_replace_all,
pattern = "\\^GSPC",
replacement = "SP500")
#> # A tibble: 3 x 2
#> col1 col2
#> <chr> <dbl>
#> 1 SP500 1
#> 2 ^IXIC 2
#> 3 ^DJI 3
Created on 2022-07-02 by the reprex package (v2.0.1)