我想知道每个展示/非展示时间段(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
)。
谢谢大家!