问题描述
这段代码
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)
)
)
产生如下所示的数据框:
letters numbers category
1 A 4 4
2 B 15 fizz
3 C 35 fizz
我想看到的结果是这个数据框:
letters numbers category
1 A 4 4
2 B 15 fizz
3 C 35 fizz
4 C 35 buzz
由于C行有两个条件成立,因此我想为每个条件创建一行。我该如何实现?
解决方法
case_when
/ ifelse
仅返回条件之一的输出。您可以执行以下操作:
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