【问题标题】:replacing "." with a character in R替换“。” R中的一个字符
【发布时间】:2021-05-14 07:14:09
【问题描述】:

我有一个字符串

NAME = “布拉德.皮特”

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

【问题讨论】:

  • . 是正则表达式中的一个特殊字符,请尝试添加 fixed = TRUE 或使用 \\.[.] 将其转义。
  • 如果您将代码行缩进 4 个空格,那么将为您格式化。

标签: r string replace letter-spacing


【解决方案1】:

试试:

NAME = "Brad.Pitt"

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

【讨论】:

    【解决方案2】:

    缺少的主要内容是您提到的所有命令都将模式视为正则表达式,而不是固定字符串,特别是在正则表达式中,点匹配任何字符 - 而不仅仅是点。您可以阅读?"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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 2020-07-28
      相关资源
      最近更新 更多