grepl неправильно идентифицирует символы ASCII в R - PullRequest
0 голосов
/ 13 апреля 2020

Итак, у меня есть база данных, которая содержит имена нескольких людей, но имена кодируются в 3 различных форматах, в основном UTF-8, Latin-1 и ASCII. Поэтому я импортировал данные, используя функцию data.table fread, используя опции encoding = "UTF-8" и encoding = "Latin-1". Однако наблюдения с ASCII по-прежнему ошибочно отображаются. Вот пример того, как выглядят первые несколько имен:

                        NAMES         
  1:               NICOL<c0>S
  2:                CAR<d1>PS
  3:                 MU<d1>OZ
  4:                CATA<d1>O

Я хочу отфильтровать эти наблюдения, я попытался отфильтровать данные, используя что-то вроде:

data[grepl("\\<c0\\>", NAMES)]

однако, это не работает, так как grepl("\\<c0\\>", NAMES) возвращает все результаты как FALSE. На самом деле единственный способ, которым мне удалось получить желаемое совпадение, это сделать:

data[grepl("À", data$NAMES, useBytes = T)]

Однако, хотя я понимаю, что происходит (по большей части), я не понимаю, почему я должен поставить де Символ ASCII «А» внутри grepl() вместо отображаемого текста R. В основном это <c0> в "NICOL<c0>S".

Это проблема, потому что это не всегда работает. В частности, с "С", поэтому в приведенных выше примерах данных строки 2 и 3 имеют "С", но вместо этого отображаются как <d1> и замена С на grepl() не будет работать. То есть код:

data[grepl("Ñ", data$NAMES, useBytes = T)]

Было бы также неплохо узнать, есть ли лучший / более эффективный способ сделать это. Спасибо!


Воспроизводимость

Для получения этих результатов вы можете загрузить небольшой образец здесь . Пожалуйста, не забудьте импортировать данные, используя fread(stack.csv, encoding = "UTF-8"), чтобы получить то же самое Результаты. Это необходимо, потому что этот файл содержит NAMES только в формате ASCII, и поэтому, если вы не укажете encoding = "UTF-8", данные будут импортированы по-другому (фактически, показывая серьезные акценты, по некоторым причинам, однако это не может быть воспроизведено в масштабе со всем набором данных) ). Извините, что по какой-то причине я не смог сделать это с помощью консольных команд, это не приводит к воспроизведению примера.


Редактировать 1: добавлен раздел Воспроизводимость.

...