Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using case_when with multiple true conditions

Tags:

r

dplyr

case-when

This piece of code

library(dplyr)

letters = c("A","B","C")
numbers = c(4, 15, 35)

df <- data.frame(letters, numbers)

df %>% 
  mutate(category = case_when(
    numbers %% 5 == 0 ~ "fizz",
    numbers %% 7 == 0 ~ "buzz",
    TRUE ~ as.character(numbers)
  )
  )

yields a dataframe looking like this:

  letters numbers category
1       A       4        4
2       B      15     fizz
3       C      35     fizz

The outcome I would like to see is this data frame:

  letters numbers category
1       A       4        4
2       B      15     fizz
3       C      35     fizz
4       C      35     buzz

Since for row C two conditions are true I want to have one row created for each of them. How could I achieve this?

like image 396
volfi Avatar asked Nov 18 '25 23:11

volfi


1 Answers

case_when/ifelse would return output for only 1 of the condition. You could do something like this though :

library(dplyr)
df %>% 
  mutate(category = case_when(
    numbers %% 5 == 0 & numbers %% 7 == 0 ~ "fizz, buzz",
    numbers %% 5 == 0 ~ "fizz",
    numbers %% 7 == 0 ~ "buzz",
    TRUE ~ as.character(numbers))) %>% 
    tidyr::separate_rows(category)

#  letters numbers category
#  <chr>     <dbl> <chr>   
#1 A             4 4       
#2 B            15 fizz    
#3 C            35 fizz    
#4 C            35 buzz    
like image 87
Ronak Shah Avatar answered Nov 20 '25 19:11

Ronak Shah



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!