r - 如何在 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))))
但是,显然,没有把它做对
解决方案
怎么样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)
推荐阅读
- selenium - 使用 h2 标记内的文本定位 selenium 中的元素
- c# - 反射,如何获取 PropertyType 值并转换为 IEnumerable
- sql - 如何使用 Oracle Sql 从日期获取正确的 ISO 周数
- dynamic - 在 Airflow DAG 中跳过动态任务
- php - 当关系为空时,Laravel 继续
- java - 当分类概率为零时,为什么 NaiveBayesModel#predict 返回类别 0?
- sql - 我对来自 4 个临时表的数据有排序问题
- android - 如何调用 DevicePolicyManager 方法?
- php - 如何检查 php 表中的复选框?
- perl - 如何使用'perl -d'在特定文件中设置断点