studio - tidyverse mutate case_when




caso_cuando en tubo de mutación (4)

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

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 ~ "low",
          mtcars$carb > 2 ~ "high") %>% 
  table

trabajos:

.
high  low 
  15   17 

Pero ponga case_when en una cadena de mutate :

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

y obtienes:

 Error: object 'carb' not found

mientras esto funciona bien

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

Además de la respuesta de @ akrun anterior, tenga en cuenta que el paréntesis de cierre para el case_when() no se puede colocar 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")
      ) 

Gracias a @sumedh: @hadley here que esta es una deficiencia 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.


Podemos usar .$

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




dplyr