作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 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/
我是一名优秀的程序员,十分优秀!