以编程方式使用dplyr case_when

时间:2017-12-02 21:03:37

标签: r dplyr

我试图使用dplyr case_when并传递变量,但结果并不像预期的那样。

示例:

library(dplyr)
mtcars %>% 
  mutate(cg = case_when(carb <= 2 ~ "low",
                        carb > 2  ~ "high")) ---this works

然而,当我尝试传递一个变量时,它会返回全部为&#34; low&#34;

var <- quo(carb)
mtcars %>% 
  mutate(cg = case_when(!!var <= 2 ~ "low",
                    !!var > 2  ~ "high"))

1 个答案:

答案 0 :(得分:3)

这是一个操作顺序问题,你需要使用括号:

quo_function <- function(df, var) {
  df %>%
    mutate(cg = case_when((!!var) <= 2 ~ "low",
                          (!!var) > 2 ~ "high"))  
}

看一下这篇文章this post