多行

时间:2017-08-08 08:33:46

标签: r time intervals overlap

我正在尝试用时间间隔来解决一个问题,从某种程度上说,这让我很头疼。

这是两个身份证的药物处方示例。

df <- data.frame('ID' = c('1','1','1','1','2','2'), 'start' = c('2010-01-01', '2010-01-03', '2010-01-05', '2010-01-09','2010-02-01', '2010-02-10'),
             'end' = c('2010-01-03', '2010-01-22', '2010-01-07', '2010-01-12', '2010-02-10', '2010-02-12'))

  ID      start        end
1  1 2010-01-01 2010-01-03
2  1 2010-01-03 2010-01-22
3  1 2010-01-05 2010-01-07
4  1 2010-01-09 2010-01-12
5  2 2010-02-01 2010-02-10
6  2 2010-02-10 2010-02-12

目的是建立一个新栏目,表明持续吸毒。因此在这个例子中,两个ID都有连续使用(处方结束和下一个处方开始之间的最大间隙= 1天)。最终结果应如下所示(逻辑表示连续使用):

  ID      start        end  continuous
1  1 2010-01-01 2010-01-03 FALSE
2  1 2010-01-03 2010-01-22 TRUE
3  1 2010-01-05 2010-01-07 TRUE
4  1 2010-01-09 2010-01-12 TRUE
5  2 2010-02-01 2010-02-10 FALSE
6  2 2010-02-10 2010-02-12 TRUE

我尝试使用dplyr和lubridate来解决这个问题,但是没有设法为第4行获得正确的结果,因为第3行不是连续的,而是第2行。这是我的代码:

df$start <- ymd(df$start)
df$end <- ymd(df$end)
df <- df %>% group_by(ID) %>% mutate(continuous = if_else(lag(end) - start >= -1, TRUE, FALSE, missing = FALSE))

我真的很感激这方面的一些帮助! THX!

0 个答案:

没有答案