使用滞后变量,按组

Using lag variable, by group

我有一个看起来像这样的 df,我需要 运行 一个代码来生成 changechange定义为第一次永久正数outcome(outcome=1).

逻辑如下:

具有所需输出变量的我的数据是

id visit outcome change
1   1     0       0
1   2     0       0
1   3     0       0 
1   4     1       1
1   5     1       0

2   1     0       0
2   2     1       0
2   3     0       0
2   4     1       1
2   5     1       0  

3   1     0       0
3   2     NA      1
3   3     1       1
3   4     1       0
3   5     1       0

您可以使用 dplyr 轻松完成此操作:

library(dplyr)
df <- data.frame(id = rep(c(1,2,3), each = 5), visit = rep(1:5, 3), 
       outcome = c(0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, NA, 1,1,1))
df %>%
group_by(id) %>%
mutate(change = as.numeric(lead(outcome) == 1 & outcome == 1),
       change = ifelse(visit == 5, 0, change),
       change = ifelse(is.na(change), lead(change), change))