gpt4 book ai didi

r - 如何在 dplyr 中获取 case_when 接受来自角色的条件

转载 作者:行者123 更新时间:2023-12-04 00:20:38 25 4
gpt4 key购买 nike

我正在尝试在 Shiny 的应用程序中使用 case_when 来构建一个应用程序,显示以一组规则表示的某些选择策略的预览。

在应用程序中,用户可以输入case_when语法的表达式,例如:

cond = "Age > 40 ~ 1, TRUE ~ 0"

它们应该在 case_when 中替换。

我正在查看 rlang 并试图弄清楚如何从字符向量中获取表达式,例如

tibble::tribble(~Age,23,26,32,50,51,52,25,49,34,54) %>% 
mutate(result = case_when(!!!quos(syms(cond))))

但是,显然,没有把它做对

最佳答案

parse_exprs 怎么样?

library(dplyr)
library(rlang)
cond <- "Age > 40 ~ 1, TRUE ~ 0"
cond <- gsub(",",";",cond)
repdata %>% mutate(result = case_when(!!!rlang::parse_exprs(cond)))
## A tibble: 10 x 2
# Age result
# <dbl> <dbl>
# 1 23 0
# 2 26 0
# 3 32 0
# 4 50 1
# 5 51 1
# 6 52 1
# 7 25 0
# 8 49 1
# 9 34 0
#10 54 1

这是必需的,因为 parse_expr 返回一个表达式,而 case_when 需要 2 个或更多表达式(在代码中以逗号分隔)有 2 个案例。同时,parse_exprs 返回 2 个或更多表达式,但它在 ; 上拆分表达式。​​

数据

repdata <- tibble::tribble(~Age,23,26,32,50,51,52,25,49,34,54)

关于r - 如何在 dplyr 中获取 case_when 接受来自角色的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61003760/

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