根据相对于治疗日期的日期查找事件

Find An Event Based on Date Relative to a Treatment Date

我正在处理一些长格式的数据,并尝试使用 R 来处理它并准备进行分析。每个项目都有一个唯一标识 (UNIQUE_ID) 和一系列事件(例如:a、c、d、v)以及相应的事件日期。而且,还有治疗日期(TX_DATE).

我正在尝试为每个主题标记某个事件类型 (c),当且仅当它发生在 TX_DATE 之后。此外,我想确定治疗 (TX_DATE) 和感兴趣事件发生的日期 (c with EVENT_DATE) 之间的时间。

示例输入数据:

UNIQUE_ID   EVENT   EVENT_DATE  TX_DATE
       1     a       1/1/1999   1/15/2020
       1     a       1/6/2002   1/15/2020
       1     c       2/2/2020   1/15/2020
       2     v       1/4/1999   7/1/2020
       2     v       1/5/2012   7/1/2020
       2     d       6/7/2020   7/1/2020
       2     c       4/3/1998   7/1/2020
       2     c       8/8/2020   7/1/2020
       2     d       9/5/2010   7/1/2020
       3     a       6/5/1995   6/2/2020
       3     a       9/12/2020  6/2/2020
       4     v       1/6/1998   8/1/2020
       4     v       7/8/2019   8/1/2020
       4     a       9/8/2020   8/1/2020
       4     c       7/6/2020   8/1/2020

示例输出数据:

UNIQUE_ID   EVENT   EVENT_DATE  TX_DATE   POST_TX_FLAG  TIME_EVENT_DAYS TIME_EVENT_MONTHS
      1      a       1/1/1999   1/15/2020     0             7684              252.60
      1      a       1/6/2002   1/15/2020     0             6583              216.40
      1      c       2/2/2020   1/15/2020     1               18                0.59
      2      v       1/4/1999   7/1/2020      0             7849              258.02
      2      v       1/5/2012   7/1/2020      0             3100              101.91
      2      d       6/7/2020   7/1/2020      0               24                0.79
      2      c       4/3/1998   7/1/2020      0             8125              267.09
      2      c       8/8/2020   7/1/2020      1               38                1.25
      2      d       9/5/2010   7/1/2020      0             3587              117.92
      3      a       6/5/1995   6/2/2020      0             9129              300.10
      3      a       9/12/2020  6/2/2020      0              102                3.35
      4      v       1/6/1998   8/1/2020      0             8243              270.97
      4      v       7/8/2019   8/1/2020      0              390               12.82
      4      a       9/8/2020   8/1/2020      0               38                1.25
      4      c       7/6/2020   8/1/2020      0               26                0.85

此外,我将要处理的数据可能有很多事件。我想将输出限制为 TX_DATE.

之后的第一个事件

如果您在 R 中使用 tidyverselubridate

假设您的数据包含在数据框中df

library(tidyverse)
library(lubridate)

df %>% mutate( EVENT_DATE = mdy(EVENT_DATE),
                 TX_DATE = mdy(TX_DATE),
                 POST_TX_FLAG = EVENT_DATE > TX_DATE,
                 TIME_EVENT_DAYS = time_length(TX_DATE - EVENT_DATE , unit="day"),
                 TIME_EVENT_MONTHS = time_length(TX_DATE - EVENT_DATE , unit="month") )