R中dplyr管道多条件case_when分组汇总逻辑实现问题
dplyr管道中多分支case_when分组判断实现
修正思路
原有代码未处理purchases == "none"的无效观测,且case_when分支不全、判断顺序不匹配规则优先级,调整要点如下:
- 分组后先在组内剔除
purchases值为"none"的观测,再做后续判断 case_when严格按规则优先级从高到低写条件,命中即返回对应值,不再执行后续判断- 组内排序保留原始数据顺序,避免取前2条记录时顺序错乱
完整实现代码
library(dplyr) actions %>% # 生成原始行号保证组内顺序和原数据一致,无顺序要求可删除 mutate(raw_row = row_number()) %>% group_by(id) %>% # 按id+原始行号组内排序 arrange(id, raw_row, .by_group = TRUE) %>% # 组内过滤掉purchases为none的无效观测 filter(purchases != "none") %>% summarise( output = case_when( # 排除none后前2条观测均为need,返回yes first(purchases) == "need" & nth(purchases, 2) == "need" ~ "yes", # 组内不存在need或want的观测,返回none all(!purchases %in% c("need", "want")) ~ "none", # 其余所有情况返回no TRUE ~ "no" ), .groups = "drop" )
边界场景适配
- 若某id所有观测值都是"none",过滤后组内无有效记录,会自动命中第二个判断返回"none",符合规则要求
- 若某id排除"none"后仅1条"need"记录,第一条判断因第二个值不存在不成立,因存在"need"值会走到最后分支返回"no",符合规则要求
- 若某id排除"none"后第一条是"need"、第二条是其他值,第一条判断不成立,最终返回"no"
内容的提问来源于stack exchange,提问作者Eman
相关产品推荐
相关产品推荐

