替换“。”带有R中的字符

replacing "." with a character in R

我有一个字符串是

名称 =“Brad.Pitt”

我想替换“.”带有 space (" ")。我尝试全部使用 sub、gsub、str_replace、str_replace。他们工作不正常。有什么我遗漏的吗?

尝试:

NAME = "Brad.Pitt"

gsub("\.", " ", NAME)

缺少的主要内容是您提到的所有命令都将模式视为正则表达式,而不是固定字符串,特别是在正则表达式中,点匹配任何字符——而不仅仅是点。您可以通过阅读 ?"regular expression"

了解更多信息

这里有一些备选方案。 (1) 第一个使用 fixed=TRUE 以便第一个参数中的特殊字符不被解释为正则表达式字符。我们使用 sub 代替一次出现,但如果出现多次并且您想将它们全部替换为 space,则使用 gsub 代替 sub。 (2) 第二个用方括号转义点,因此它不被解释为正则表达式字符。转义点的另一种方法是在它前面加上反斜杠,因此使用 R 4.0 r"{...}" 表示法我们可以使用 r"{\.}" 作为模式,或者不使用该表示法请参阅其他答案。 (3) chartr 根本不使用正则表达式。它将用 space 替换每个点。 (4) substr<- 将第5个字符替换为space。 (5) scan 分别读入单词,创建一个包含两个分量的字符向量,然后 paste 将它们粘贴回去,并在它们之间添加一个 space。如果有多个点,那么它将用 space.

替换每个点
# 1
sub(".", " ", NAME, fixed = TRUE)
## [1] "Brad Pitt"

# 2
sub("[.]", " ", NAME)
## [1] "Brad Pitt"

# 3
chartr(".", " ", NAME)
## [1] "Brad Pitt"

# 4
`substr<-`(NAME, 5, 5, ' ')
## [1] "Brad Pitt"

# 5
paste(scan(text = NAME, what = "", sep = ".", quiet = TRUE), collapse = " ")
## [1] "Brad Pitt"

标题

另请注意,如果您使用点的原因是您将其作为标题阅读,那么您可以使用 check.names = FALSE 来避免这种情况。比较下面两个 read.csv 命令输出中的标题。

Lines <- "BRAD PITT
1
2"

read.csv(text = Lines)
##   BRAD.PITT
## 1         1
## 2         2

read.csv(text = Lines, check.names = FALSE)
##   BRAD PITT
## 1         1
## 2         2