问题描述
x1=3
x2=3
x3=4
x4=7
df_new = data.frame(x1,x2,x3,x4)
a<-"-3>x1>=1.45 & -3<=x2<3 & x4==7"
df_new <- data.frame(x1=3,x2=3,x3=4,x4=7)
eval(parse(text=a),df_new)
我需要使用正则表达式将上述规则转换为“ -3> x1&x1> =-1.45&-3
解决方法
我将分几个步骤进行操作:
- 将逻辑运算符拆分为单独的不等式。
- 将双重不等式-3> x1> =-1.45更改为两个不等式。
- 将“ =”更改为“ ==“,然后将它们放在一起。
例如:
a1 <- strsplit(a,"&",fixed = TRUE)[[1]]
a1a <- gsub(" ","",a1) # get rid of spaces
a2 <- gsub("([-0-9.]+[<>=]+)([[:alpha:]]+[[:alnum:]]*)([<>=]+.+)","\\1\\2 & \\2\\3",a1a)
a3 <- paste(gsub("[^<>]={1}","==",a2),collapse = " & ")
给出a3
等于
[1] "-3>x1 & x1>=-1.45 & -3<=x2 & x2<3 & x==7"
如果您除了&之外还有其他逻辑运算,或者您的变量具有非字母数字字符(例如点或下划线),则此操作将无效。它也将因x1 <= x2 <= x3
等不等式而失败。如果这些情况发生,我将留给您处理。