Как удалить многоточие в конце строки в R

У меня есть список слов, который я получил из кода ниже.

tags_vector <- unlist(tags_used)

У некоторых строк в этом списке в конце есть многоточие, которое я хочу удалить. Здесь я печатаю 5-й элемент этого списка и его класс

tags_vector[5]
#[1] "#b…"

class(tags_vector[5])
#[1] "character"

Я пытаюсь удалить многоточие из этого 5-го элемента, используя gsubиспользуя код,

gsub("[…]", "", tags_vector[5])
#[1] "#b…"

Этот код не работает, и я получаю "#b…" в качестве вывода. Но в том же коде, когда я помещаю значение 5-го элемента напрямую, он работает нормально, как показано ниже,

gsub("[…]", "", "#b…")
#[1] "#b"

Я даже пытался поставить значение tags_vector[5] в переменной x1 и пытался использовать его в gsub() код, но он все еще не работает.

1 ответ

Это может быть проблема Unicode. В R(studio) не все персонажи созданы одинаково.

Я попытался создать воспроизводимый пример:

# create the ellipsis from the definition (similar to your tags_used)
> ell_def <- rawToChar(as.raw(c('0xE2','0x80','0xA6'))) # from the unicode definition here: http://www.fileformat.info/info/unicode/char/2026/index.htm
> Encoding(ell_def) <- 'UTF-8'
> ell_def
[1] "…"
> Encoding(ell_def)
[1] "UTF-8"

# create the ellipsis from text (similar to your string)
> ell_text <- '…'
> ell_text
[1] "…"
> Encoding(ell_text)
[1] "latin1"

# show that you can get strange results
> gsub(ell_text,'',ell_def)
[1] "…"

Воспроизводимость этого примера может зависеть от вашей локали. В моем случае я работаю в windows-1252, так как вы не можете установить языковой стандарт UTF-8 в Windows. Согласно этому источнику stringi, "R позволяет строкам в ASCII, UTF-8 и нативной кодировке вашей платформы мирно сосуществовать". Как показывает пример выше, иногда это может давать противоречивые результаты.

По сути, вывод, который вы видите, выглядит одинаково, но не на уровне байтов.

Если я запускаю этот пример в терминале R, я получаю аналогичные результаты, но, по-видимому, он показывает многоточие в виде точки: ".".

Быстрое решение для вашего примера - использование определения многоточия в gsub. Например:

gsub(ell_def,'',tags_vector[5])
Другие вопросы по тегам