gpt4 book ai didi

r - 从每一行的字符串中评估不同的逻辑条件

转载 作者:行者123 更新时间:2023-12-04 13:36:11 24 4
gpt4 key购买 nike

我有这样的data.frame:

  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.88
5 0.57 value < 0.9
6 0.10 value > 0.01
7 0.90 value >= 0.6
8 0.25 value < 0.91
9 0.04 value > 0.2

structure(list(value = c(0.46, 0.96, 0.45, 0.68, 0.57, 0.1, 0.9,
0.25, 0.04), condition = c("value > 0.5", "value == 0.79", "value <= 0.65",
"value == 0.88", "value < 0.9", "value > 0.01", "value >= 0.6",
"value < 0.91", "value > 0.2")), class = "data.frame", row.names = c(NA,
-9L))


我想评估每一行的 condition列中的字符串。

因此结果将如下所示。
  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

我想在 dplyr框架中有一个方便的NSE解决方案。我已经尝试过 !!expr()等。当尝试使用 condition进行子集化时,我得到了一些有希望的结果
result <- df[0,]
for(i in 1:nrow(df)) {
result <- rbind(result, filter_(df[i,], bquote(.(df$condition[i]))))
}


但是我不喜欢这种解决方案,这也不是我所追求的。

我希望有人能帮帮忙。

更新:我正在尝试避免 eval(parse(..))

最佳答案

不确定是否要查找类似的内容,但是,您也可以使用lazy_eval()中的lazyeval:

df %>%
rowwise() %>%
mutate(res = lazy_eval(sub("value", value, condition)))

value condition res
<dbl> <chr> <lgl>
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.570 value < 0.9 TRUE
6 0.1 value > 0.01 TRUE
7 0.9 value >= 0.6 TRUE
8 0.25 value < 0.91 TRUE
9 0.04 value > 0.2 FALSE

即使它非常接近 eval(parse(...)),也有可能使用 parse_expr()中的 rlang:
df %>%
rowwise() %>%
mutate(res = eval(rlang::parse_expr(condition)))

关于r - 从每一行的字符串中评估不同的逻辑条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55807468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com