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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With