2015-08-12 48 views
9

Łączę niektóre tabele, które wyglądają prawie tak samo, z tym że niektóre znaki są akcentowane w niektórych i nie są akcentowane w innych. Na przykład "André" czasami brzmi "Andre", "Flávio" i "Flavio", itp. Muszę uważać wszystkie warianty za równe, ale unikalne() uważa je za różne. Pomyślałem o zmianie wszystkich akcentowanych na nieakcentowane, a następnie za pomocą unique(), ale pomyślałem, że może jest jeszcze inna, szybsza opcja.Używanie unique() i == do dopasowywania znaków akcentowanych i nieakcentowanych

Później muszę zrobić to samo niewrażliwe na nacisk porównanie używając == więc myślę o usunięciu wszystkich akcentów z kopii każdej tabeli, i dokonuję porównania na kopiach. Proszę powiedz mi, czy istnieje inne, lepsze podejście.

+3

Twoje podejście wydaje się właściwe. Uwaga 'iconv (" André ", to = 'ASCII // TRANSLIT') ==" Andre "' –

+0

Wygląda to znacznie lepiej niż konwersja każdego możliwego akcentu, @ A.Webb. Przyjmuję to jako odpowiedź. Dziękuję Ci! – Rodrigo

+0

dotyczy (prawie duplikat, jedna odpowiedź z 'stringi :: stri_trans_general'): https://stackoverflow.com/questions/13610319/convert-accented-characters-into-ascii-character –

Odpowiedz

6

Podejście polegające na usunięciu akcentów przed porównaniem wydaje się odpowiednie do twoich celów. Należy zauważyć, że taki obiekt istnieje w iconv z TRANSLIT flagą

iconv(c("André","Flávio"),to='ASCII//TRANSLIT') 
#> [1] "Andre" "Flavio" 
+0

Tak, stworzyłem funkcję, która sprawia, że to i konwertuje na wielkie litery w tym samym czasie: ICONV <- function (x) {return (iconv (toupper (x), to = 'ASCII // TRANSLIT'))} Dziękujemy! – Rodrigo