status_df
每个阶段我都有一个ID和状态:
ID | 阶段 | 状态 |
---|---|---|
15 | 1个 | 待定 |
15 | 2 | 未发送 |
16 | 1个 | 已批准 |
16 | 2 | 被拒绝 |
16 | 3 | 未发送 |
16 | 4 | 未发送 |
20 | 1个 | 已批准 |
20 | 2 | 已批准 |
20 | 3 | 已批准 |
我试图做一个group_by ID并应用以下逻辑:
any
ID的阶段状态为“待处理”,则final_status列为“待处理”any
ID的阶段状态为“已拒绝”,则final_status列为“已拒绝”all
ID的阶段已批准,则final_status列为“已批准”我正在尝试这样做(不起作用):
final_status_df = status_df %>% select(id, status) %>% group_by(id) %>%
mutate(final_status = case_when(any(status)=="Pending" ~ "Pending",
any(status)=="Rejected" ~ "Rejected",
all(status)=="Approved" ~ "Approved"))
预期输出(final_status_df):
ID | final_status |
---|---|
15 | 待定 |
16 | 被拒绝 |
20 | 已批准 |
您的尝试方向正确,但是在比较()之前,您已将any
/all
括弧括起来==
。另外,由于您只希望每行id
可以使用1行,summarise
而不是每行都mutate
可以避免使用select
。
library(dplyr)
status_df %>%
group_by(id) %>%
summarise(final_status = case_when(any(status == "Pending") ~ "Pending",
any(status == "Rejected") ~ "Rejected",
all(status == "Approved") ~ "Approved"))
# id final_status
#* <int> <chr>
#1 15 Pending
#2 16 Rejected
#3 20 Approved
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句