r - 基于多列值的复杂 case_when() 语句 (dplyr)
问题描述
我有一个 data.frame,表格中的单独列中有偏差类别的风险
a<- data.frame(
Q1_long_name=(sample(c("y","n","m"), 21, replace = T)),
Q2_long_name=(sample(c("y","n","m"), 21, replace = T)),
Q3_long_name=(sample(c("y","n","m"), 21, replace = T)),
Q4_long_name=(sample(c("y","n","m"), 21, replace = T)),
Q5_long_name=(sample(c("y","n","m"), 21, replace = T)),
Q6_long_name=(sample(c("y","n","m"), 21, replace = T))
Q7_long_name=(sample(c("y","n","m"), 21, replace = T))
)
由于变量的名称很长(其他函数需要),因此我的 case_when() 语句非常长且不可读。有一些像:
a %>%
mutate(overall_rob=
case_when(
Q1_long_name=="y"& Q2_long_name=="n" & Q3_long_name=="n" & Q5_long_name!="m" ~ "high",
Q1_long_name=="n"| Q2_long_name=="n" | Q3_long_name=="n" | Q5_long_name!="m" ~ "low",
TRUE ~ "unclear" ))
我设法通过在使用 case_when() 之前重命名我的变量然后将它们改回来来做到这一点,但它仍然看起来很乱(正如TarJae所指出的那样)。
a %>%
rename_with(.cols=matches("^Q"), ~ gsub("^(Q[0-9]).*","\\1", .x))
因此,我想知道是否有任何方法可以流线 case_when 使用%in%
或类似的东西来一次指定多个条件?如果没有,TarJae的方式肯定会更容易
解决方案
您是否正在寻找这样的解决方案?
library(dplyr)
a %>%
rename_with(~str_extract(., "^[^_]+(?=_)")) %>%
mutate(overall_rob=
case_when(
Q1=="y" & Q2=="n" & Q3=="n" & Q5!="m" ~ "high",
Q1=="n" | Q2=="n" | Q3=="n" | Q5!="m" ~ "low",
TRUE ~ "unclear"))
推荐阅读
- javascript - codemirror:搜索并突出显示多个单词而无需对话框
- java - java中锁的工作原理
- javascript - Chrome 扩展获取 API - 内容安全政策
- dart - 颤动的滚动视图不滚动
- r - 为什么相同的行名会在条形图轴标签上产生不同的结果?
- javascript - AJAX 请求后刷新 div
- shell - 我想在 shell 中打印 $,但它总是被删除
- powershell - 不等待成功响应的站点的 Powershell 预热脚本
- sql - 在 Postgresql 中,如何按列选择前 n% 的行?
- postgresql - 如何将具有 n 列的表映射到数据库?