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.
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