2017-02-06 2 views
1

У меня есть список слов, которые я получил из-под кода.Как удалить эллипсис в конце строки в 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() коде, но это все еще не работают.

+2

Не могли бы вы предоставить 'tags_vector'? Он работает для меня с помощью простого 'x <-" #b ... "', поэтому я предполагаю, что он связан с вашим вектором. – LAP

+0

См. Https://ideone.com/61hWht, похоже, работает. BTW, поскольку многоточие не является ASCII, вы можете попробовать с stringr 'str_replace_all':' library (stringr) '->' str_replace_all (tags_vector [5], "...", "") ' –

+0

Это действительно похоже на unicode вопрос. Возможно, печать тегов_vector [5] уже изменяет символ (например, для многоточия есть два разных юникода: [2026] (http://www.fileformat.info/info/unicode/char/2026/index. htm) и [22EF] (http://www.fileformat.info/info/unicode/char/22EF/index.htm)). Это также объясняет, почему прямой gsub действительно работает. Не могли бы вы попробовать 'gsub (gsub (" [# b] "," ", tags_vector [5])," ", tags_vector [5])'? – takje

ответ

0

Это может быть проблема с 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. Согласно this stringi source, «R позволяет использовать строки в ASCII, UTF-8 и встроенную кодировку вашей платформы мирно». Как показывает вышеприведенный пример, это может иногда давать противоречивые результаты.

В принципе, вывод, который вы видите, выглядит одинаково, но не на байтовом уровне.

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

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

gsub(ell_def,'',tags_vector[5])