r语言 - 根据三种设置格式提取字符串的多个部分



我很好奇是否有一种简单的方法可以根据可能的不同格式提取字符串的多个部分。我希望能够传入格式为"x>= a"、"x <= b"或"a <= x <= b"形式的字符串向量。变量 x 应该能够变化为任何变量名称,a 和 b 必须是数值

理想情况下,它将是一个函数,它将产生以下数据框作为结果,因为我传入了 cons 字符串变量。

              cons lower_bound variable upper_bound
1           x >= 1           1        x          NA
2         s <= 100          NA        s         100
3 0 <= beta <= 500           0     beta         500

只要cons条目的格式一致,这应该有效:

library(tidyverse)
df <- 
  tibble(
    cons = c("x >= 1", "s <= 100", "0 <= beta <= 500")
  )
df %>% 
  mutate(
    lower_bound = case_when(
      str_detect(cons, ">=") ~ str_extract(cons, "\d+$"),
      str_detect(cons, "<=(.)+<=") ~ str_extract(cons, "^\d+"),
      TRUE ~ NA_character_
    ),
    variable = str_extract(cons, "[a-z]+"),
    upper_bound = case_when(
      str_detect(cons, "<=") ~ str_extract(cons, "\d+$"),
      TRUE ~ NA_character_
    )
  )
# A tibble: 3 x 4
  cons             lower_bound variable upper_bound
  <chr>            <chr>       <chr>    <chr>      
1 x >= 1           1           x        NA         
2 s <= 100         NA          s        100        
3 0 <= beta <= 500 0           beta     500        

最新更新