R语言数据集分组处理:如何同步实现末尾0及前置1或末尾1裁剪
R代码修改方案
你需要基于原始分组的末尾outcome值并行判断裁剪规则,避免分步执行导致的二次裁剪问题,修改后代码如下:
detect <- detect %>% group_by(bird) %>% mutate(new = cumsum(outcome)) %>% filter( case_when( last(outcome) == 0 ~ new < max(new), last(outcome) == 1 ~ row_number() < n() ) ) %>% ungroup %>% select(-new)
逻辑说明
- 所有判断都基于原始分组的末尾
outcome值,两类规则同步执行,不存在先后处理的顺序,符合要求。 - 若分组末尾为0:沿用原有逻辑,移除末尾连续0及前序最后一个1。
- 若分组末尾为1:直接过滤掉分组最后一行记录,即移除末尾的1。
效果验证
针对你提供的样例数据,代码输出和预期结果完全一致:
| bird | outcome |
|---|---|
| a | 0 |
| a | 0 |
| a | 1 |
| b | 0 |
| c | 1 |
| c | 1 |
你举的0001100序列测试用例,分组末尾为0,执行第一类规则裁剪后得到0001,不会触发第二类规则,符合要求。
内容的提问来源于stack exchange,提问作者user17047272
相关产品推荐
相关产品推荐

