【问题标题】:How to remove ellipsis at the end of Strings in R如何删除R中字符串末尾的省略号
【发布时间】:2017-06-23 05:36:44
【问题描述】:

我有单词列表,我从下面的代码中得到。

tags_vector <- unlist(tags_used)

此列表中的某些字符串末尾有省略号,我想将其删除。这里我打印了这个列表的第 5 个元素,以及它的类

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

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

我正在尝试使用 gsub 删除第 5 个元素中的省略号,使用代码,

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

此代码不起作用,我得到“#b…”作为输出。但是在相同的代码中,当我直接输入第 5 个元素的值时,它可以正常工作,如下所示,

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

我什至尝试将tags_vector[5] 的值放入变量x1 并尝试在gsub() 代码中使用它,但它仍然不起作用。

【问题讨论】:

  • 你能提供tags_vector吗?它适用于我一个简单的x &lt;- "#b...",所以我想它与你的向量有关。
  • ideone.com/61hWht,它似乎工作。顺便说一句,由于省略号不是 ASCII,您可以尝试使用 stringr str_replace_all: library(stringr) -> str_replace_all(tags_vector[5], "…", "")
  • 这确实似乎是一个 unicode 问题。可能是 tags_vector[5] 的打印已经改变了字符(例如,省略号有两种不同的 unicode:202622EF)。这也可以解释为什么直接 gsub 确实有效。你可以试试gsub(gsub("[#b]","",tags_vector[5]), "", tags_vector[5]) 吗?
  • 可能是编码问题,能否也显示 sessionInfo() 的结果?

标签: r regex ellipsis


【解决方案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 中工作,因为您无法在 Windows 中将语言环境设置为 UTF-8。根据this stringi source 的说法,“R 让 ASCII、UTF-8 和您平台的本机编码中的字符串和平共处”。如上例所示,这有时可能会产生矛盾的结果。

基本上,您看到的输出看起来相同,但不是字节级别的。

如果我在 R 终端中运行此示例,我会得到类似的结果,但显然,它会将省略号显示为一个点:“.”。

您的示例的快速解决方法是在您的 gsub 中使用省略号定义。例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多