Evaluate different logical conditions from string for each row

后端 未结 4 1703
小鲜肉
小鲜肉 2020-12-11 18:33

I have a data.frame like this:

  value     condition
1  0.46   value > 0.5
2  0.96 value == 0.79
3  0.45 value <= 0.65
4  0.68 value == 0.         


        
4条回答
  •  无人及你
    2020-12-11 19:19

    If you want to avoid eval(parse... you can try this:

    library(tidyverse)
    df %>% mutate(bound = as.numeric(str_extract(condition, "[0-9 \\.]*$")),
                  goal = case_when(grepl("==", condition) ~ value == bound,
                                   grepl(">=", condition) ~ value >= bound,
                                   grepl("<=", condition) ~ value <= bound,
                                   grepl(">", condition) ~ value > bound,
                                   grepl("<", condition) ~ value < bound,
                                   T ~ NA))
    
      value     condition bound  goal
    1  0.46   value > 0.5  0.50 FALSE
    2  0.96 value == 0.79  0.79 FALSE
    3  0.45 value <= 0.65  0.65  TRUE
    4  0.68 value == 0.88  0.88 FALSE
    5  0.57   value < 0.9  0.90  TRUE
    6  0.10  value > 0.01  0.01  TRUE
    7  0.90  value >= 0.6  0.60  TRUE
    8  0.25  value < 0.91  0.91  TRUE
    9  0.04   value > 0.2  0.20 FALSE
    

提交回复
热议问题