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

dplyr按ID分组实现日差低于30时保留前序treatment值生成treatment_cont变量

实现方案

核心思路

使用dplyr的向量化操作完成,无需逐行循环,效率适配百万级以上数据量:通过条件累计求和生成辅助分组,将「间隔<30需继承前序值」的行归为同一组,再按组取首次治疗值即可。

完整代码

library(dplyr)

# 样例数据构造,可替换为你自己的数据集
df <- tibble(
  ID = c(1,1,1,1,2,2,2,2,2,2),
  day = c(0,14,20,73,0,33,90,112,152,178),
  day_diff = c(NA,14,6,53,NA,33,57,22,40,26),
  treatment = c(1,1,2,1,1,1,2,3,1,4)
)

# 核心计算逻辑
df_result <- df %>%
  # 按ID分组,不同ID的计算互不干扰
  group_by(ID) %>%
  # 生成辅助分组:ID首行/相邻间隔≥30时开启新分组
  mutate(grp = cumsum(is.na(day_diff) | day_diff >= 30)) %>%
  # 按ID和辅助分组二次分组
  group_by(ID, grp) %>%
  # 同组内取第一个treatment值作为连续序列的统一值
  mutate(treatment_cont = first(treatment)) %>%
  ungroup() %>%
  # 删除辅助列
  select(-grp)

结果验证

运行后生成的treatment_cont和你提供的样例输出完全一致:

IDdayday_difftreatmenttreatment_cont
10NA11
1141411
120622
1735311
20NA11
2333311
2905722
21122232
21524011
21782641

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:04