查找治疗组的开始和停止

问题描述 投票:0回答:1

这里使用 tidyverse。我有一个数据框,其中每小时都有条目(行),以及这一小时是否应用某种处理的信息。

id <- rep(5, 10)
time <- c(1,2,3,4,5,6,7,8,9,10)
drug <- c("A", "A", "A", "B", "A", "D", "A", "A", "C", "B")
df <- df <- tibble(id, time, drug)

我现在想找到治疗组的开始和停止时间点,我想象的结果是这样的:

    start <- c(1,1,1,4,5,6,7,7,9,10)
    stop <- c(4,4,4,5,6,7,9,9,10, NA)
    df <- tibble(id, time, drug, start, stop)

      id  time drug  start  stop
   <dbl> <dbl> <chr> <dbl> <dbl>
 1     5     1 A         1     4
 2     5     2 A         1     4
 3     5     3 A         1     4
 4     5     4 B         4     5
 5     5     5 A         5     6
 6     5     6 D         6     7
 7     5     7 A         7     9
 8     5     8 A         7     9
 9     5     9 C         9    10
10     5    10 B        10    NA

我不知道如何找到这些群组。我尝试过

lead()
lag()
但失败了。

r
1个回答
0
投票

您可以使用

consecutive_id
功能进行分组。例如

df %>% 
  group_by(run=consecutive_id(drug)) %>% 
  mutate(start=min(time), stop=max(time)+1) %>% 
  ungroup() %>% 
  select(-run)

会回来

      id  time drug  start  stop
   <dbl> <dbl> <chr> <dbl> <dbl>
 1     5     1 A         1     4
 2     5     2 A         1     4
 3     5     3 A         1     4
 4     5     4 B         4     5
 5     5     5 A         5     6
 6     5     6 D         6     7
 7     5     7 A         7     9
 8     5     8 A         7     9
 9     5     9 C         9    10
10     5    10 B        10    11

这确实假设所有时间都是连续的

© www.soinside.com 2019 - 2024. All rights reserved.