Использование unique() и == для сопоставления акцентированных и неакцентированных символов

Я собираю несколько таблиц, которые выглядят почти одинаково, за исключением того, что некоторые символы в одних выделены, а в других нет. Например, «Андре» иногда читается как «Андре», «Флавио» и «Флавио» и т. д. Мне нужно рассматривать все варианты как равные, но функция unique() считает их разными. Я думал о том, чтобы изменить все акцентированные на не акцентированные, а затем использовать unique(), но я подумал, что, возможно, есть другой, более быстрый вариант.

Позже мне нужно сделать такое же сравнение без учета акцента, используя ==, поэтому я думаю об удалении всех акцентов из копии каждой таблицы и сравнении копий. Пожалуйста, скажите мне, есть ли другой, лучший подход.


person Rodrigo    schedule 12.08.2015    source источник
comment
Ваш подход кажется подходящим. Примечание iconv("André",to='ASCII//TRANSLIT') == "Andre"   -  person A. Webb    schedule 12.08.2015
comment
Это выглядит намного лучше, чем преобразование всех возможных акцентов, @A.Webb. Я приму это как ответ. Спасибо!   -  person Rodrigo    schedule 12.08.2015
comment
релевантно (почти дубликат, один ответ с stringi::stri_trans_general): stackoverflow.com/questions/13610319/   -  person Moody_Mudskipper    schedule 17.08.2017


Ответы (1)


Подход удаления акцентов перед сравнением кажется подходящим для ваших целей. Обратите внимание, что такое средство существует в iconv с флагом TRANSLIT.

iconv(c("André","Flávio"),to='ASCII//TRANSLIT')
#> [1] "Andre"  "Flavio"
person A. Webb    schedule 12.08.2015
comment
Да, я сделал функцию, которая делает это и одновременно преобразует в верхний регистр: ICONV ‹- function(x) { return(iconv(toupper(x),to='ASCII//TRANSLIT')) } Спасибо! - person Rodrigo; 12.08.2015