基于先前事件的变量

时间:2021-05-27 13:28:35

标签: r data.table

我想知道每个展示/非展示时间段(exp = 1/0)是否有以前的事件或诊断。

我有一个类似的数据库:

id = c( rep(1, 5), rep(2, 5), rep(3, 5))
exp = c( rep(c(0, 1), 5), c(0, 1, 0, 1, 0))
diag = c( c(1, 0, 0, 0, 1), c(0, 0, 1, 0, 0), c(1, 0, 1, 1, 0))
DO = c( c(0, 1, 1, 1, 1), c(0, 0, 0, 1, 1), c(0, 1, 1, 1, 1))

DT = data.table(id, exp, diag)

DT

    id exp diag
 1:  1   0    1
 2:  1   1    0
 3:  1   0    0
 4:  1   1    0
 5:  1   0    1
 6:  2   1    0
 7:  2   0    0
 8:  2   1    1
 9:  2   0    0
10:  2   1    0
11:  3   0    1
12:  3   1    0
13:  3   0    1
14:  3   1    1
15:  3   0    0

我尝试使用 cumsum 和 fcase:

DT [ , previous_diag := cumsum ( diag ), by = .(id)]

DT [ , previous_diag := fcase ( previous_diag > 0 , 1 ,
                                previous_diag == 0 , 0 ) ]

但我无法获得想要的结果:

    id exp diag DO
 1:  1   0    1  0
 2:  1   1    0  1
 3:  1   0    0  1
 4:  1   1    0  1
 5:  1   0    1  1
 6:  2   1    0  0
 7:  2   0    0  0
 8:  2   1    1  0
 9:  2   0    0  1
10:  2   1    0  1
11:  3   0    1  0
12:  3   1    0  1
13:  3   0    1  1
14:  3   1    1  1
15:  3   0    0  1

有什么想法吗?

如果可能的话,我只希望 DO 在 exp == 1 时有值。一旦获得DO,除了显而易见的方法之外还有其他方法吗?我只能考虑过滤器 (exp == 0) 并将 NA 分配给 DO 变量 (DO := NA)。

谢谢大家!

0 个答案:

没有答案
相关问题