我有一个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"))
也许像这样?
a %>%
mutate(case1 = Q1_long_name=="y"&
Q2_long_name=="n" &
Q3_long_name=="n" &
Q5_long_name!="m")%>%
mutate(case2 = Q1_long_name=="n"|
Q2_long_name=="n" |
Q3_long_name=="n" |
Q5_long_name!="m")
mutate(overall_rob=
case_when(
case1 ~ "high",
case2 ~ "low",
TRUE ~ "unclear" ))