str_replace_all doesn't work with strings that contains parenthesis

Viewed 250

I have the below df

library(tidyverse)

a <- tibble(country = c(
     "Bolivia (Estado Plurinacional de)",
     "Corea del Sur (República de)",
     "Reino Unido de Gran Bretaña e Irlanda del Norte",
     "Venezuela (República Bolivariana de)",
     "Congo (República Democrática del)",
     "República Árabe Siria"
))

then, I try to replace the countries with str_replace_all function

dict <- c(
 "Bolivia (Estado Plurinacional de)" = "Bolivia",
 "Corea del Sur (República de)" = "Corea del Sur",
 "Reino Unido de Gran Bretaña e Irlanda del Norte" = "Reino Unido",
 "Venezuela (República Bolivariana de)" = "Venezuela",
 "Congo (República Democrática del)" = "Congo",
 "República Árabe Siria" = "Siria"
)

a$country %>% str_replace_all(pattern = dict)

but the code doesn't work for all the strings, e.g., Venezuela (República Bolivariana de) or Congo (República Democrática del). Could someone help me with this issue?

Thanks a lot

1 Answers

Simply replace your dict with

dict <- c(
  "Bolivia \\(Estado Plurinacional de\\)" = "Bolivia",
  "Corea del Sur \\(República de\\)" = "Corea del Sur",
  "Reino Unido de Gran Bretaña e Irlanda del Norte" = "Reino Unido",
  "Venezuela \\(República Bolivariana de\\)" = "Venezuela",
  "Congo \\(República Democrática del\\)" = "Congo",
  "República Árabe Siria" = "Siria"
)

In RegEx the parenthesis are special characters. So you have to use escape characters, in this case \\( and \\) instead of ( and ).

Using this new dict your code returns

> a$country %>% str_replace_all(pattern = dict)
[1] "Bolivia"       "Corea del Sur" "Reino Unido"   "Venezuela"     "Congo"         "Siria" 
Related