提问人:TarJae 提问时间:11/17/2023 更新时间:11/17/2023 访问量:49
case_when(): 如果第一个语句中满足所有条件,如何添加警告消息
case_when(): How to add a warning message if all conditions are met in the first statement
问:
请考虑以下示例数据框:
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()
我们如何实施这样的“警告”或“注释”?
答: 暂无答案
评论