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

使用Dplyr Summarize实现指定分组数值聚合:5天再入院费用统计

解决方法

你原来的代码问题在于两点:

  1. 首次入院记录因为没有前序入院时间,计算lag时会得到NA,没有做处理
  2. 仅标记了后一次入院为5天内再入院,没有将前一次关联入院和它归到同一汇总组,导致id=2的两次符合合并条件的记录没法一起求和

正确的实现代码如下:

library(dplyr)

dt %>%
  group_by(id) %>%
  arrange(admit_date, .by_group = TRUE) %>%
  mutate(
    # 计算和前一次入院的间隔,首次入院默认给10(大于5即可)
    duration = ifelse(is.na(lag(admit_date)), 10, admit_date - lag(admit_date)),
    # 生成入院分组标记:间隔>=6就新开一组,同组的就是要合并求和的记录
    adm_group = cumsum(duration >= 6)
  ) %>%
  # 按用户id和入院分组求和
  group_by(id, adm_group) %>%
  summarise(sum_price = sum(price), .groups = "drop") %>%
  select(-adm_group)

运行后输出结果和你预期的完全一致:

# A tibble: 5 × 2
     id sum_price
  <dbl>     <dbl>
1     1        10
2     1        20
3     2        50
4     3        15
5     4        16

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:06:00