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

时间:2020-09-14 13:21:01

标签: r data-wrangling

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

我正在尝试(但仅)在每个主题的TX_DATE之后发生某个事件类型(c),以进行标记。此外,我想确定治疗(TX_DATE)和感兴趣事件发生的日期之间的时间(c为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之后的第一个事件。

1 个答案:

答案 0 :(得分:0)

如果在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") )