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

如何提取各医院中group 0与group 1的重叠住院时段?

按医院分组提取不同组时段重叠的记录组合

需求说明

给定数据框df,包含studyid、hospitalname、Date1、Date2、group字段,需按hospitalname分组,提取group=0与group=1中时间区间(Date1至Date2)存在重叠的所有记录组合。

示例数据

library(zoo)

# 创建示例数据
df <- data.frame(
  studyid = 1:5,
  Date1 = as.yearmon(c("2020-01", "2020-03", "2020-10", "2020-07", "2020-06")),
  Date2 = as.yearmon(c("2020-02", "2020-10", "2021-02", "2020-08", "2020-10")),
  hospitalname = c("Hospital A", "Hospital A", "Hospital A", "Hospital B", "Hospital B"),
  group = c(0, 1, 0, 1, 0)
)

解决方案

核心逻辑:拆分不同组的数据,按医院做交叉匹配,筛选出区间重叠的组合,最后整理为目标格式。

library(dplyr)
library(zoo)

# 拆分group=0和group=1的数据并重命名字段
group0 <- df %>% filter(group == 0) %>% rename_with(~paste0(., "_0"), c(studyid, Date1, Date2))
group1 <- df %>% filter(group == 1) %>% rename_with(~paste0(., "_1"), c(studyid, Date1, Date2))

# 按医院交叉连接,筛选区间重叠的组合
result <- group0 %>%
  inner_join(group1, by = "hospitalname") %>%
  # 时间区间重叠判断:0组的起始<=1组的结束,且0组的结束>=1组的起始
  filter(Date1_0 <= Date2_1 & Date2_0 >= Date1_1) %>%
  # 按期望顺序排列字段
  select(studyid.0, Date1_0, Date2_0, studyid.1, Date1_1, Date2_1, hospitalname)

# 查看结果
result

结果验证

运行代码后输出与期望结果一致:

#   studyid.0 Date1_0 Date2_0 studyid.1 Date1_1 Date2_1 hospitalname
# 1         3 Nov 20  Feb 21         2 Mar 20  Oct 20  Hospital A
# 2         5 Jul 20  Oct 20         4 Aug 20  Sep 20  Hospital B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:22:14