case_when en mutate pipe

Parece que dplyr::case_when no se comporta como otros comandos en una llamada dplyr::mutate . Por ejemplo:

 library(dplyr) case_when(mtcars$carb  2 ~ "high") %>% table 

trabajos:

 . high low 15 17 

Pero pon case_when en una cadena case_when :

 mtcars %>% mutate(cg = case_when(carb  2 ~ "high")) 

y obtienes:

  Error: object 'carb' not found 

mientras esto funciona bien

 mtcars %>% mutate(cg = carb %>% cut(c(0, 2, 8))) 

A partir de la versión 0.7.0 de dplyr , case_when funciona dentro de case_when siguiente manera:

 library(dplyr) # >= 0.7.0 mtcars %>% mutate(cg = case_when(carb <= 2 ~ "low", carb > 2 ~ "high")) 

Para más información: http://dplyr.tidyverse.org/reference/case_when.html

Podemos usar .$

 mtcars %>% mutate(cg = case_when(.$carb <= 2 ~ "low", .$carb > 2 ~ "high")) %>% .$cg %>% table() # high low # 15 17 

Gracias a @sumedh: @hadley ha explicado que esta es una falla conocida de case_when :

case_when() todavía es algo experimental y actualmente no funciona dentro de mutate() . Eso se solucionará en una versión futura.

Además de la respuesta anterior de @ akrun, tenga en cuenta que el paréntesis de cierre para el case_when() no puede colocarse en su propia línea.

Por ejemplo, esto funciona bien:

 mtcars %>% mutate(cg = case_when( .$carb <= 2 ~ "low", .$carb > 2 ~ "high")) 

pero esto no:

 mtcars %>% mutate(cg = case_when( .$carb <= 2 ~ "low", .$carb > 2 ~ "high") )