R tidyverse实现按id分组后rec首次出现1后后续行全置1的方法
实现代码
你可以直接用dplyr内置的累积最大值函数cummax()实现,完全符合你的管道写法要求:
library(tidyverse) # 构造原始数据 a <- tibble(id = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3), rec = c(0,0,1,1,0,0,1,0,0,0,0,1,0,1,0)) # 计算result列 b <- a %>% group_by(id) %>% mutate(result = cummax(rec)) %>% ungroup()
逻辑说明
cummax()的作用是按行计算到当前位置为止的累积最大值,因为你的rec列只有0和1两个取值:- 同一id分组下,首次出现1之前,所有行的累积最大值都是0,和
rec值完全一致 - 首次出现1之后,后续所有行的累积最大值永远为1,正好匹配你要求的「首次出现1后所有行result都为1」的规则
- 同一id分组下,首次出现1之前,所有行的累积最大值都是0,和
- 运行后得到的
b和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

