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