在多个真实条件下使用case_when

问题描述

这段代码

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    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...