【问题标题】:Extract formula terms using regex in R在 R 中使用正则表达式提取公式术语
【发布时间】:2022-10-15 16:05:17
【问题描述】:

我正在寻找一个正则表达式,它可以帮助我提取公式中以函数开头并在括号内的术语。

例如,假设我有以下公式:

formula <- formula(cured ~ dur(duration) + age + sex + duranduran)

我可以提取单个术语:

attr(terms(formula), "term.labels")

返回向量

[1] "dur(duration)" "age"          "sex"          "duranduran"

我想使用grep 和一些正则表达式来给出dur() 所包含的任何术语的索引。到目前为止,我已经尝试过

grep("^dur", attr(terms(formula), "term.labels"))

但这没有考虑括号。它返回 1 和 4,因为术语 dur(duration)duranduran 都以 dur 开头。我正在寻找一个正则表达式:

dur( 开头,以) 结尾。

【问题讨论】:

  • 你的意思是grep("^dur\\(.*\\)$", attr(terms(formula), "term.labels"))

标签: r regex


【解决方案1】:

您可以使用

grep("^dur\(.*\)$", attr(terms(formula), "term.labels"))

细节

  • ^ - 字符串开头
  • dur - dur 子字符串
  • ( - 一个 ( 字符
  • .* - 尽可能多的零个或多个字符
  • ) - 一个 ) 字符
  • $ - 字符串结束。

请参阅regex demo

【讨论】:

    【解决方案2】:

    这可以满足您对包装的要求弦乐并假设您要提取始终以dur() 作为目标函数的术语。

    如果您想概括它,请告诉我。

    library(stringr)
    formula <- formula(cured ~ dur(duration) + age + sex + duranduran)
    
    elements = attr(terms(formula), "term.labels")
    idx = str_which(elements, "^dur\(\w+\)")
    idx
    #> [1] 1
    

    创建于 2022-10-07 由 reprex package (v2.0.1)

    【讨论】:

      【解决方案3】:

      这样做没有正则表达式。首先获取标签,然后使用startsWith/endsWith 我们有以下内容。如果逻辑向量结果正常,则省略 which

      labs <- labels(terms(formula))
      which(startsWith(labs, "dur(") & endsWith(labs, ")"))
      

      笔记

      输入等效和简化的问题:

      formula <- cured ~ dur(duration) + age + sex + duranduran
      

      【讨论】:

        猜你喜欢
        • 2022-01-08
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-25
        • 2021-07-05
        • 1970-01-01
        相关资源
        最近更新 更多