R:有条件的递增柜台

安妮

我需要一个变量“ minus_180_days” /(计数器)以升序编号:

  1. 第一次来

  2. 如果第二次的时间少于180天(与患者的前次就诊相比);如果不符合180天标准,则在第二次访问中还必须显示1;

  3. 如果在第三次访问中,与上一次访问之间相隔不到180天(访问“ 2”),如果不满足180天的标准,则在第三次访问中为1,依此类推

数据

pacient <- c(10,10,10,10,10,11,11,12,12,12,13, 13, 15, 14); pacient
date <- as.Date(c("01/01/2018","02/05/2018", "04/06/2018", "10/11/2019", "05/12/2018", "02/01/2018", "06/08/2018", "01/01/2018", "03/01/2018", "06/03/2018", "05/08/2018", "05/08/2019", "05/07/2019", "08/07/2017"), format = "%d/%m/%Y"); date 
DF <- data.frame(pacient, date); DF

我有这个代码

DF <- DF %>%
  group_by(pacient) %>%
  arrange(date) %>%
  mutate(days_visit = date - lag(date, default = first(date))) 
days_visit <- as.integer(DF$days_visit) 

DF <- DF[with(DF,order(pacient,date)),]

我需要的输出(预期输出我需要的输出

坦率

这似乎可行:

library(data.table)
setDT(DF)
setorder(DF, pacient, date)

DF[, v := rowid(pacient, cumsum(date - shift(date, fill=first(date)) > 180))]

    pacient       date v
 1:      10 2018-01-01 1
 2:      10 2018-05-02 2
 3:      10 2018-06-04 3
 4:      10 2018-12-05 1
 5:      10 2019-11-10 1
 6:      11 2018-01-02 1
 7:      11 2018-08-06 1
 8:      12 2018-01-01 1
 9:      12 2018-01-03 2
10:      12 2018-03-06 3
11:      13 2018-08-05 1
12:      13 2019-08-05 1
13:      14 2017-07-08 1
14:      15 2019-07-05 1

使用Gregor的更高级数据进行测试...

pacient2 <- c(10,10,10,10,10,10,10,10,11,11,12,12,12,13, 13, 15, 14)
date2 <- as.Date(c("01/01/2018","02/05/2018", "04/06/2018", "10/11/2019", "11/11/2019", "12/11/2019", "13/11/2019", "05/12/2018", "02/01/2018", "06/08/2018", "01/01/2018", "03/01/2018", "06/03/2018", "05/08/2018", "05/08/2019", "05/07/2019", "08/07/2017"), format = "%d/%m/%Y")
DF2 <- data.frame(pacient = pacient2, date = date2)

library(data.table)
setDT(DF2)
setorder(DF2, pacient, date)

DF2[, v := rowid(pacient, cumsum(date - shift(date, fill=first(date)) > 180))]

    pacient       date v
 1:      10 2018-01-01 1
 2:      10 2018-05-02 2
 3:      10 2018-06-04 3
 4:      10 2018-12-05 1
 5:      10 2019-11-10 1
 6:      10 2019-11-11 2
 7:      10 2019-11-12 3
 8:      10 2019-11-13 4
 9:      11 2018-01-02 1
10:      11 2018-08-06 1
11:      12 2018-01-01 1
12:      12 2018-01-03 2
13:      12 2018-03-06 3
14:      13 2018-08-05 1
15:      13 2019-08-05 1
16:      14 2017-07-08 1
17:      15 2019-07-05 1

我得到了不同的结果,但这似乎是有道理的。让我知道是否有问题,任何人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章