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

在R语言中按日期分组统计每日住院床位使用量的高效方法

简便实现每日床位使用数统计的方法

你可以借助tidyverse系列工具包(结合lubridate处理日期)或者data.table来高效完成这个转换,完全不需要手动写循环。以下是两种常用方案:

方案一:使用tidyverse + lubridate

这个方案代码可读性强,适合常规规模的数据:

library(tidyverse)
library(lubridate)

# 先转换日期格式并计算出院日期(住院天数包含起始日,所以出院日=起始日+住院天数-1)
my_df_processed <- my_df %>%
  mutate(
    StartDate = ymd(StartDate),
    EndDate = StartDate + days(BedDays - 1)
  )

# 生成每个患者的住院日期序列,再按日期统计床位使用数
daily_bed_usage <- my_df_processed %>%
  rowwise() %>%
  # 为每个患者生成从入院到出院的日期列表
  mutate(daily_dates = list(seq(StartDate, EndDate, by = "day"))) %>%
  # 展开日期列表为单行单日期格式
  unnest(daily_dates) %>%
  # 按日期分组,统计当日在院人数(即床位使用数)
  group_by(daily_dates) %>%
  summarise(bed_count = n(), .groups = "drop") %>%
  rename(Date = daily_dates)

# 查看结果
print(daily_bed_usage)

方案二:使用data.table

如果你的数据集规模较大,data.table的处理效率会更高:

library(data.table)
library(lubridate)

# 转换为data.table格式并处理日期
setDT(my_df)
my_df[, `:=`(
  StartDate = ymd(StartDate),
  EndDate = StartDate + days(BedDays - 1)
)]

# 生成日期序列并统计
daily_bed_usage <- my_df[, .(Date = seq(StartDate, EndDate, by = "day")), by = RecordID] %>%
  .[, .(bed_count = .N), by = Date]

# 查看结果
print(daily_bed_usage)

两种方案的核心逻辑一致:先为每位患者生成完整的住院日期序列,再按日期分组计数,得到当日的床位使用数量,全程无需手动编写循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:17:18