首页 > 解决方案 > 如何在 dplyr 中获取 case_when 接受字符的条件

问题描述

我正在尝试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))))

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

标签: rdplyrcase-whenrlang

解决方案


怎么样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)

推荐阅读