R 中的 gsub() 没有替换 '.' (点)

Posted

技术标签:

【中文标题】R 中的 gsub() 没有替换 \'.\' (点)【英文标题】:gsub() in R is not replacing '.' (dot)R 中的 gsub() 没有替换 '.' (点) 【发布时间】:2015-10-09 16:09:33 【问题描述】:

我想将"2014.06.09" 中的点替换为"2014-06-09"。我正在使用 gsub() 函数。如果

x <-  "2014.06.09"
gsub('2', '-' ,x)
# [1] "-014.06.09"

但是当我尝试时

gsub('.', '-', x)
# [1] "----------"

而不是"2014-06-09"

class(x)
# "character"

有人可以建议我一种方法来解决这个问题,以及为什么它不适用于'.'(点)

【问题讨论】:

【参考方案1】:

您可能需要转义 .,这是一个表示“任何字符”的特殊字符(来自 @Mr Flick 的评论)

 gsub('\\.', '-', x)
 #[1] "2014-06-09"

或者

gsub('[.]', '-', x)
#[1] "2014-06-09"

或者如cmets中提到的@Moix,我们也可以使用fixed=TRUE来代替转义字符。

 gsub(".", "-", x, fixed = TRUE)

【讨论】:

@drmariod 是的,那是另一种选择 或者使用fixed = TRUE,它不使用正则表达式,而只是搜索字符。 gsub(".", "-", x, fixed = T) 如果我们想用空格之类的东西来改变每一个标点符号怎么办?在处理来自社交媒体或评论的文本时,我会在单词之间使用很多点或其他标点符号,因为他们在完成句子后忘记使用空格。 @MehdiAbbassi 你可以做gsub("[[:punct:]]", " ", x)【参考方案2】:

对于更复杂的任务,stringr 包可能会很有趣

https://cran.r-project.org/web/packages/stringr/vignettes/stringr.html

https://github.com/rstudio/cheatsheets/raw/master/strings.pdf

library(stringr)

str_replace_all(x,"\\.","-")
## [1] "2014-06-09"

或者

str_replace_all(x,"[.]","-")
## [1] "2014-06-09"

【讨论】:

以上是关于R 中的 gsub() 没有替换 '.' (点)的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中的一个 gsub() 或 chartr() 语句中替换多个字符串?

R - gsub 替换反斜杠

替换列名 gsub 中的字符

R语言sub函数和gsub函数替换(replace)匹配的字符串实战

r 用gsub替换字符串的所有出现

用数字R替换列中的字符