Как удалить многоточие в конце строки в 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])