【问题标题】:Is there any method replace repeating pattern specifically in R?是否有任何方法专门替换 R 中的重复模式?
【发布时间】:2020-04-17 08:24:41
【问题描述】:

我有一个包含单词和数字的字符串。

[1] "\r\nfund \r\ncompany \r\nfee \r\nsales \r\ngroup \r\npayment \r\nmanagement \r\nfirm \r\nfee \r\ntotal \r\npayment \r\nsubtotal \r\nfee \r\nsynthetic \r\nfee... sth ... \r\n0.646 0.030 0.030 0.015 1.253....

如你所见,有一种模式有 sth~ fee, sth~ payment。 我的最终目标是使用扫描功能或其他方法将单词分组以制作此表(如果您有任何想法,请回复。)

所以我尝试删除所有空白,因为扫描功能(我猜)以一些空白作为标准来划分单词组。

我的意思是,我想让这个字符串像这样

[1] "\r\nfundcompanyfee \r\nsalesgrouppayment \r\nmanagementfirmfee \r\ntotalpayment \r\nsubtotalfee \r\nsyntheticfee... sth ... \r\n0.646 0.030 0.030 0.015 1.253....

我尝试过像这样使用 gsub 函数

 gsub("\r\n\\w\\w.*?fee|payment","\\w\\w",strings)

但结果很糟糕。它使字符串像这样

ww ww ww ww........ 0.646 0.030 0.030 ....

那是它不将 \w 识别为单词.. 只需将其翻译为 'w' 就可以了!

所以我需要一些帮助来处理这个问题。 感谢您的阅读。

【问题讨论】:

    标签: r regex string


    【解决方案1】:

    试试这个。可能可以简化,但它有效:

    library(stringr)
    
    strings <- "\r\nfund \r\ncompany \r\nfee \r\nsales \r\ngroup \r\npayment \r\nmanagement \r\nfirm \r\nfee \r\ntotal \r\npayment \r\nsubtotal \r\nfee \r\nsynthetic \r\nfee \r\n0.646 0.030 0.030 0.015 1.253"
    
    # values
    values <- stringr::str_extract_all(strings, "\\d+\\.\\d+")[[1]]
    values <- paste0("\r\n", paste(values, collapse = " "))
    # categories
    categories <- stringr::str_extract_all(strings, "(\\r\\n\\w+\\s){1,2}\\r\\n(fee|payment)")[[1]] 
    categories <- stringr::str_replace_all(categories, "(\\r\\n|\\s)", "")
    categories <- paste(paste0("\r\n", categories), collapse = " ")
    # merge
    strings1 <- paste(categories, values)
    strings1
    #> [1] "\r\nfundcompanyfee \r\nsalesgrouppayment \r\nmanagementfirmfee \r\ntotalpayment \r\nsubtotalfee \r\nsyntheticfee \r\n0.646 0.030 0.030 0.015 1.253"
    

    reprex package (v0.3.0) 于 2020-04-17 创建

    【讨论】:

      【解决方案2】:

      你可以试试这个。

      library(tidyverse)
      strings <- "\r\nfund \r\ncompany \r\nfee \r\nsales \r\ngroup \r\npayment \r\nmanagement \r\nfirm \r\nfee \r\ntotal \r\npayment \r\nsubtotal \r\nfee \r\nsynthetic \r\nfee \r\n0.646 0.030 0.030 0.015 1.253"
      
      strings %>% 
       gsub("\r\n", "", .) %>% 
       gsub("fee", "fee$", .) %>% 
       gsub("payment", "payment$", .) %>% 
       str_split(., pattern = "\\$", simplify = T) %>% 
       toString() %>% 
       gsub(",","\r\n", .)
      [1] "fund company fee\r\n  sales group payment\r\n  management firm fee\r\n  total payment\r\n  subtotal fee\r\n  synthetic fee\r\n ... sth ... 0.646 0.030 0.030 0.015 1.253...."
      

      如果要删除单词之间的空格,只需在 split 函数后添加这一行 gsub(" ", "", .) %&gt;%

      【讨论】:

        猜你喜欢
        • 2020-02-27
        • 2020-05-20
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 2015-04-17
        • 2021-07-26
        相关资源
        最近更新 更多