Замена нескольких подстрок одной и той же строки одновременно в R


Я ищу замену латинских символов в векторе строк на обычные символы (например, é на e, á на a и т. д.). Я также хочу сделать это для большого вектора, поэтому я буду заменять эти символы в цикле. Я попытался сделать это с помощью одного слова ниже:

phrase <- "ÁÉÍÓÚ"
spec.elements <- c("[ÁÀÄÉÈËÍÌÏÓÒÖÚÙÜÑÇ]")

if (str_detect(phrase,spec.elements) == TRUE){
  str_replace(phrase, "Á", "A") & str_replace(phrase, "Ú", "U")
}

И я получаю следующую ошибку:

Error in str_replace(phrase, "Á", "A") & str_replace(phrase, "Ú", "U") : 
  operations are possible only for numeric, logical or complex types

Я также попробовал следующее, и выход явно не соответствует результату:

> str_replace(phrase, "[ÁÀÄÉÈËÍÌÏÓÒÖÚÙÜÑÇ]", "[AAAEEEIIIOOOUUUNC]")
[1] "[AAAEEEIIIOOOUUUNC]ÉÍÓÚ"

Может ли кто-нибудь помочь мне заменить все специальные символы обнаружен для обычных, не открывая оператор if для каждого специального символа в отдельности?

2 4

2 ответа:

Возможно chartr удовлетворить ваши потребности:

phrase <- c("ÁÉÍÓÚ", "ÚÓÍÉÁ")
spec.elements <- c("ÁÀÄÉÈËÍÌÏÓÒÖÚÙÜÑÇ")
spec.elements.rep <- c("AAAEEEIIIOOOUUUNC")
chartr(old=spec.elements, new=spec.elements.rep, x=phrase)
# [1] "AEIOU" "UOIEA"

Мы можем использовать chartr

if(grepl(spec.elements, phrase)){
 chartr('ÁÚ', 'AU', phrase)}
 #[1] "AÉÍÓU"