使用Dplyr Summarize实现指定分组数值聚合:5天再入院费用统计
解决方法
你原来的代码问题在于两点:
- 首次入院记录因为没有前序入院时间,计算
lag时会得到NA,没有做处理 - 仅标记了后一次入院为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
相关产品推荐
相关产品推荐

