Evaluate different logical conditions from string for each row

后端 未结 4 1697
小鲜肉
小鲜肉 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:08

    Using match.fun:

    # get function, and the value
    myFun <- lapply(strsplit(df1$condition, " "), function(i){
      list(f = match.fun(i[ 2 ]), 
           v = as.numeric(i[ 3 ]))
    })
    
    df1$goal <- mapply(function(x, y){ 
      x[[ "f" ]](y, x[ "v" ])
      }, x = myFun, y = df1$value)
    
    #   value     condition  goal
    # 1  0.46   value > 0.5 FALSE
    # 2  0.96 value == 0.79 FALSE
    # 3  0.45 value <= 0.65  TRUE
    # 4  0.68 value == 0.88 FALSE
    # 5  0.57   value < 0.9  TRUE
    # 6  0.10  value > 0.01  TRUE
    # 7  0.90  value >= 0.6  TRUE
    # 8  0.25  value < 0.91  TRUE
    # 9  0.04   value > 0.2 FALSE
    

提交回复
热议问题