【问题标题】:Parsing a string with multiple brackets解析带有多个括号的字符串
【发布时间】:2020-07-03 14:40:38
【问题描述】:

我有一个数据集dt,列"subject",我需要对其进行解析。例如,

ID    subject   

1     USA(Texas)(Austin)
2     USA(California)(Sacramento)

结果,我想得到下表:

ID    subject                       Country     State        Capital   

1     USA(Texas)(Austin)            USA         Texas        Austin
2     USA(California)(Sacramento)   USA         California   Sacramento

我该怎么做?

【问题讨论】:

    标签: r regex extract


    【解决方案1】:

    由于您有多个括号可以从中提取数据,因此您需要使您的正则表达式变得懒惰。

    library(dplyr)
    library(tidyr)
    
    extract(dt, subject, into = c("Country", "State", "Capital"),
                  regex = "(.*)\\((.*?)\\)\\((.*)\\)", remove = FALSE)
    
    #  ID                     subject Country      State    Capital
    #1  1          USA(Texas)(Austin)     USA      Texas     Austin
    #2  2 USA(California)(Sacramento)     USA California Sacramento
    

    另一个更简单的正则表达式选项是删除带有gsub 的圆括号,并使用带有sep 参数的separate 作为空格。

    dt %>%
      mutate(subject = trimws(gsub('[()]', ' ', subject))) %>%
      separate(subject, into = c("Country", "State", "Capital"), sep = "\\s+")
    

    数据

    dt <- structure(list(ID = 1:2, subject = structure(2:1, 
    .Label = c("USA(California)(Sacramento)", "USA(Texas)(Austin)"), 
    class = "factor")), class = "data.frame", row.names = c(NA, -2L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      相关资源
      最近更新 更多