如何基于行之间的条件差异添加新列

问题描述

我拥有大量的患者ID数据集,但手术和放射治疗(RT)疗程之间的间隔时间有所延迟。有些患者可能接受了两次或三种RT治疗。为了确定这些患者,我认为延迟时间超过91天(3个月)。 91天的延迟对应于一次RT治疗的结束和另一项RT治疗的开始。为了分析目的,可以将其设置为61天(2个月)。 如何使两个值之间91天以上的延迟与新的RT处理相对应,并将相应的订单添加到新列中? 我的数据库如下:

df1 <- data.frame (
id = c("a","a","b","c","c"),delay = c(2,3,5,6,7,9,190,195,201,203,205,1299,1303,1306,1307,200,202,204,205))

        > df1
   id delay
1   a     2
2   a     3
3   a     5
4   a     6
5   b     3
6   b     5
7   b     7
8   b     9
9   b   190
10  b   195
11  b   201
12  b   203
13  b   205
14  b  1299
15  b  1303
16  b  1306
17  b  1307
18  c   200
19  c   202
20  c   204
21  c   205

考虑到第一组延迟之间的时间是否大于100天,我无法产生这样的信息。

df2 <- data.frame (
id = c("a",205),tt_order = c("1st","1st"," 1st"," 2nd","2nd"," 3rd","3rd","1st"))

        > df2
   id delay tt_order
1   a     2      1st
2   a     3      1st
3   a     5      1st
4   a     6      1st
5   b     3      1st
6   b     5      1st
7   b     7      1st
8   b     9      1st
9   b   190      2nd
10  b   195      2nd
11  b   201      2nd
12  b   203      2nd
13  b   205      2nd
14  b  1299      3rd
15  b  1303      3rd
16  b  1306      3rd
17  b  1307      3rd
18  c   200      1st
19  c   202      1st
20  c   204      1st
21  c   205      1st

感谢您能提供的任何帮助。

解决方法

一种方法是将ImportError: /usr/local/lib/python3.6/dist-packages/open3d/linux/open3d.so...除以100,然后使用delaymatch为每个unique依次获取唯一索引。

id

创建了一个新列library(dplyr) df2 %>% group_by(id) %>% mutate(n_tt = floor(delay/100),n_tt = match(n_tt,unique(n_tt))) # id delay tt_order n_tt # <chr> <dbl> <dbl> <int> # 1 a 2 1 1 # 2 a 3 1 1 # 3 a 5 1 1 # 4 a 6 1 1 # 5 b 3 1 1 # 6 b 5 1 1 # 7 b 7 1 1 # 8 b 9 1 1 # 9 b 150 2 2 #10 b 152 2 2 #11 b 155 2 2 #12 b 159 2 2 #13 b 1301 3 3 #14 b 1303 3 3 #15 b 1306 3 3 #16 b 1307 3 3 #17 c 200 1 1 #18 c 202 1 1 #19 c 204 1 1 #20 c 205 1 1 ,用于与n_tt中的tt_order进行比较。

,

@CharlesLDN-也许这就是您想要的。这将查看每个id内延迟的差异,超过90天的间隔将被视为一种新的治疗方法。

library(tidyverse)

df1 %>%
  group_by(id) %>%
  mutate(tt_order = cumsum(c(0,diff(delay)) > 90) + 1)

输出

   id    delay tt_order
   <chr> <dbl>    <dbl>
 1 a         2        1
 2 a         3        1
 3 a         5        1
 4 a         6        1
 5 b         3        1
 6 b         5        1
 7 b         7        1
 8 b         9        1
 9 b       190        2
10 b       195        2
11 b       201        2
12 b       203        2
13 b       205        2
14 b      1299        3
15 b      1303        3
16 b      1306        3
17 b      1307        3
18 c       200        1
19 c       202        1
20 c       204        1
21 c       205        1