编写条件语句以识别 1 年内且间隔大于 30 天的日期

Write conditional statement to identify dates within 1 year and greater than 30 days apart

尝试构建条件语句来识别庞大数据集上的案例。我需要 select 有 >1 个代码间隔 30 天(即一个日期然后另一个日期 >30 天后)并且在 1 年内有多个代码的患者。

不过,我还没有真正想出如何为此编写条件。这是一个示例数据集:

dates = c("2021-01-05", "2021-01-23", "2021-04-05", "2022-01-05", "2019-01-08", "2019-01-14")
patient = c("A", "A", "A", "A", "B", "B") 
df <- data.frame(dates, ids)

患者 A 符合资格,因为他们的约会时间相隔 >30 天并且在 1 年内有 2 次约会

患者 B 不会,因为他们只在 30 天内有过 2 次约会

有没有一些简单的方法可以在 R 中计算这个?似乎是一个基本问题,但我不确定如何以有效的方式将向量中的每个实例与其他实例进行比较(实际数据集有 >100,000 名患者和 >6000 万个日期)

df <- data.frame(dates = as.Date(dates), patient)

这会查看每个患者,计算自上一个案例以来的时间,仅过滤前一个案例之后至少 30 但少于 365 天的案例,然后显示每个患者 ID 一次。

library(dplyr)
df %>% 
  arrange(dates) %>% 
  group_by(patient) %>% 
  mutate(gap = dates - lag(dates)) %>%
  filter(gap > 30, gap < 365) %>%
  ungroup() %>%
  distinct(patient)