You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr实现条件满足时累计时间、不满足时重置为0的计算

实现方案

优先使用dplyr的连续分组逻辑实现,代码简洁且性能优异:

library(dplyr)

# 方案1:基于你已生成的dd数据直接计算目标列
result <- dd %>%
  # 为连续状态相同的行分配唯一分组ID
  group_by(grp = consecutive_id(condition)) %>%
  # 条件为真时组内累计求和,为假时直接返回0
  mutate(time_condition_wanted = ifelse(condition, cumsum(time_condition), 0)) %>%
  ungroup() %>%
  select(-grp)

# 若dplyr版本低于1.1.0无consecutive_id,替换分组逻辑即可:
result <- dd %>%
  group_by(grp = cumsum(condition != lag(condition, default = first(condition)))) %>%
  mutate(time_condition_wanted = ifelse(condition, cumsum(time_condition), 0)) %>%
  ungroup() %>%
  select(-grp)

# 方案2:从原始数据d一步生成,无需提前计算间隔
result <- d %>%
  group_by(grp = consecutive_id(condition)) %>%
  mutate(
    time_condition_wanted = ifelse(
      condition, 
      as.numeric(date - first(date)), 
      0
    )
  ) %>%
  ungroup() %>%
  select(-grp)

运行后验证all(result$time_condition_wanted == should_be)将返回TRUE,完全匹配预期输出。

内容的提问来源于stack exchange,提问作者b_surial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:15:07