替换“。”带有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
我有一个字符串是
名称 =“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