缺少的主要内容是您提到的所有命令都将模式视为正则表达式,而不是固定字符串,特别是在正则表达式中,点匹配任何字符 - 而不仅仅是点。您可以阅读?"regular expression"
了解更多信息
这里有一些替代方案。 (1) 第一个使用fixed=TRUE,这样第一个参数中的特殊字符就不会被解释为正则表达式字符。我们使用了sub,它替换了一次出现,但如果出现多次并且您想用空格替换它们,那么使用gsub 代替sub。 (2) 第二个用方括号转义点,因此它不会被解释为正则表达式字符。转义点的另一种方法是在它前面加上反斜杠,因此使用 R 4.0 r"{...}" 符号我们可以使用 r"{\.}" 作为模式,或者没有该符号,请参阅其他答案。 (3) chartr 根本不使用正则表达式。它将用空格替换每个点。 (4) substr<- 将第 5 个字符替换为空格。 (5) scan 分别读入单词,创建一个包含两个分量的字符向量,然后paste 将它们粘贴在一起,它们之间有一个空格。如果有多个点,那么它会将每个点替换为一个空格。
# 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