R:带条件的向上计数器

标签 r dplyr counter

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

  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)),]

我需要的输出(预期输出) the output that I need

最佳答案

一个 dplyr 解决方案,已更新以反射(reflect) @Gregor 的有用评论:

DF2 <- DF %>%
  group_by(pacient) %>%
  arrange(pacient, date) %>%
  mutate(days_visit = (date - lag(date, default = first(date))) %>% as.integer,
         new_count = cumsum(days_visit > 180) + 1) %>%
  group_by(pacient, new_count) %>%
  mutate(vis_num = row_number(),
         counter = case_when(vis_num == 1      ~ 1L,
                             days_visit < 180  ~ vis_num,
                             TRUE              ~ 1L))
> DF
# A tibble: 14 x 5
# Groups:   pacient [6]
   pacient date       days_visit vis_num counter
     <dbl> <date>          <int>   <int>   <int>
 1      10 2018-01-01          0       1       1
 2      10 2018-05-02        121       2       2
 3      10 2018-06-04         33       3       3
 4      10 2018-12-05        184       4       1
 5      10 2019-11-10        340       5       1
 6      11 2018-01-02          0       1       1
 7      11 2018-08-06        216       2       1
 8      12 2018-01-01          0       1       1
 9      12 2018-01-03          2       2       2
10      12 2018-03-06         62       3       3
11      13 2018-08-05          0       1       1
12      13 2019-08-05        365       2       1
13      14 2017-07-08          0       1       1
14      15 2019-07-05          0       1       1

关于R:带条件的向上计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55541602/

相关文章:

r - 循环计算权重并创建新变量

R:将行拆分为多行,然后将列拆分为多列

r - 如何从命令行渲染flexdashboard?

css - 输入密码后启动 Shiny 应用程序(使用 Shinydashboard)

r - 有效地在时间序列中添加缺失值

r - 首先和最后使用 dplyr 但忽略 NA 值

java - 您如何从数组列表中提取项目并对它们进行计数,以便在 Java 中根据元素及其总计数(正确地)创建映射?

arm - 补偿ARM中断的延迟?

python - Python计数器的大小

r - 合并两个数据集,但其中一个是year_month,另一个是year_month_week