DataFrame条件连接:计算护理连续体一年内累计治疗时长
计算护理连续体一年内累计治疗时长
问题背景
现有两个DataFrame:
- Persons:存储多个护理连续体的基础信息,包含护理连续体ID、起始日期等字段
- Treatments:记录对应护理连续体的治疗信息,包含治疗日期、时长等字段
需要为每个护理连续体,计算从其起始日开始365天内的累计治疗总时长。
数据示例
Persons DataFrame
library(tidyverse) library(lubridate) persons = read.csv("https://www.dropbox.com/s/5ziygvwnbvq73fc/persons.csv?dl=1") %>% mutate(continuum_start = ymd(continuum_start)) %>% select(-1) persons

Treatments DataFrame
treatments = read.csv("https://www.dropbox.com/s/0nfokiheo43lwjy/treatments.csv?dl=1") %>% mutate(treatment_date = ymd(treatment_date)) %>% select(-1) treatments

解决方案
通过tidyverse和lubridate工具包实现,步骤如下:
- 关联两个DataFrame的护理连续体ID
- 筛选出治疗日期在护理连续体起始日至起始日+365天范围内的记录
- 按护理连续体分组,对符合条件的治疗时长求和
代码实现:
# 关联数据并计算累计时长 result = persons %>% left_join(treatments, by = "continuum_id") %>% # 筛选365天范围内的治疗记录 filter(treatment_date >= continuum_start, treatment_date <= continuum_start + days(365)) %>% # 按护理连续体分组求和 group_by(continuum_id, continuum_start) %>% summarise(total_treatment_duration = sum(treatment_duration, na.rm = TRUE)) %>% ungroup() result
期望结果
最终结果包含护理连续体ID、起始日期,以及该连续体起始后一年内的累计治疗时长,示例如下:
内容的提问来源于stack exchange,提问作者st4co4
相关产品推荐
相关产品推荐

