case_when(): 如果第一个语句中满足所有条件,如何添加警告消息

case_when(): How to add a warning message if all conditions are met in the first statement

提问人:TarJae 提问时间:11/17/2023 更新时间:11/17/2023 访问量:49

问:

请考虑以下示例数据框:

df <- structure(list(id = 1:3, Day = c(0L, 0L, 0L), baseline = structure(c(0.78, 
0.92, 1.09), names = c("", "", "")), day_1_2_value = structure(c(1.24, 
1.62, 2.41), names = c("", "", "")), day_3_7_value = structure(c(1.08, 
2.07, 5.64), names = c("", "", ""))), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))

     id   Day baseline day_1_2_value day_3_7_value
  <int> <int>    <dbl>         <dbl>         <dbl>
1     1     0     0.78          1.24          1.08
2     2     0     0.92          1.62          2.07
3     3     0     1.09          2.41          5.64

我想在以下条件下使用case_when:

library(dplyr)

df %>%
 mutate(akin_stage = case_when(
  day_3_7_value >= baseline * 1.5 & day_3_7_value <= baseline * 1.9 | 
  day_3_7_value >= baseline + 0.3 ~ "Stage 1",
  day_3_7_value >= baseline * 2.0 & day_3_7_value < baseline * 3.0 ~ "Stage 2",
  day_3_7_value >= baseline * 3.0 ~ "Stage 3"))

输出:

     id   Day baseline day_1_2_value day_3_7_value akin_stage
  <int> <int>    <dbl>         <dbl>         <dbl> <chr>     
1     1     0     0.78          1.24          1.08 Stage 1   
2     2     0     0.92          1.62          2.07 Stage 1   
3     3     0     1.09          2.41          5.64 Stage 1

但正确的输出是:

library(dplyr)

df %>%
 mutate(akin_stage = case_when(
  day_3_7_value >= baseline * 3.0 ~ "Stage 3",
  day_3_7_value >= baseline * 2.0 & day_3_7_value < baseline * 3.0 ~ "Stage 2",
  day_3_7_value >= baseline * 1.5 & day_3_7_value <= baseline * 1.9 | 
  day_3_7_value >= baseline + 0.3 ~ "Stage 1"
))

输出:

    id   Day baseline day_1_2_value day_3_7_value akin_stage
  <int> <int>    <dbl>         <dbl>         <dbl> <chr>     
1     1     0     0.78          1.24          1.08 Stage 1   
2     2     0     0.92          1.62          2.07 Stage 2   
3     3     0     1.09          2.41          5.64 Stage 3  

正如你所看到的,重新排列条件的顺序提供了正确的解决方案。这是因为,在初始解决方案中,“阶段 1”满足所有条件,因此不会触发后续条件。

因此,如果第一个条件满足所有条件,是否需要发出警告?case_when()

我们如何实施这样的“警告”或“注释”?

r dplyr 条件语句

评论


答: 暂无答案