如何用R计算医疗服务每日病例负荷量并解决计算异常问题?
医疗病例负荷量随时间变化计算方案
数据预处理
首先转换日期格式,并处理未结案病例(Discharge.date为NA的病例,将其出院日期设为统计时间范围的最后一天,确保这类病例持续计入负荷直到统计结束):
# 转换日期列格式 df$Referral.date <- as.Date(df$Referral.date) df$Discharge.date <- as.Date(df$Discharge.date) # 定义统计时间范围(自动取数据中最早转诊日和最晚出院日,也可手动指定) start_date <- min(df$Referral.date, na.rm = TRUE) end_date <- max(c(df$Referral.date, df$Discharge.date), na.rm = TRUE) # 若需固定统计到某一天,比如2019-01-01,替换为: # end_date <- as.Date("2019-01-01") # 处理未结案病例的NA值 df$Discharge.date[is.na(df$Discharge.date)] <- end_date
生成每日病例变化量
通过构造转诊(+1)和出院(-1)事件,按日期汇总每日的病例增减数:
# 构造转诊事件数据 referral_events <- data.frame( date = df$Referral.date, change = 1 ) # 构造出院事件数据 discharge_events <- data.frame( date = df$Discharge.date, change = -1 ) # 合并所有事件并按日期汇总 all_events <- rbind(referral_events, discharge_events) daily_changes <- aggregate(change ~ date, data = all_events, sum)
计算每日病例负荷量
生成完整日期序列,填充无变化日期的数值,最终通过累积求和得到每日负荷:
# 生成连续日期序列 date_seq <- data.frame(date = seq(start_date, end_date, by = "day")) # 合并日期序列与每日变化,无变化日期设为0 daily_changes <- merge(date_seq, daily_changes, by = "date", all.x = TRUE) daily_changes$change[is.na(daily_changes$change)] <- 0 # 计算每日负荷:累积求和 daily_changes$daily.caseload <- cumsum(daily_changes$change)
解决异常波动问题
你遇到的骤降问题核心原因是未处理NA值或日期序列不完整:
- 未结案病例的NA出院日期会导致该病例提前从负荷中移除,统一设为统计结束日可避免此问题
- 完整的日期序列确保每一天的增减都被连续计算,不会出现断层导致的累积错误
结果可视化验证
用ggplot快速查看负荷变化趋势:
library(ggplot2) ggplot(daily_changes, aes(x = date, y = daily.caseload)) + geom_line(color = "#2c3e50") + labs(x = "日期", y = "每日病例负荷量", title = "病例负荷随时间变化") + theme_minimal()
内容的提问来源于stack exchange,提问作者SOFaddict
相关产品推荐
相关产品推荐

