1

我想知道每个展览/非展览期间是否有先前的事件或诊断(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)。

谢谢你们!

4

0 回答 0