2017-02-14 68 views
0

我有一个df看起来像这样,我需要运行一个代码来产生changechange被定义为第一次永久性正面outcomeoutcome = 1)。使用滞后变量,按组

的逻辑如下:

  • 每个ID具有5 visits在每个visit
  • change变量的outcome的值只能是1如果结果是1visit x和其后
  • 例如,id 2不能有change = 1在time 2因为outcome回复为负在time 3.
  • 一个额外的皱纹包括缺少的数据。对于id 3在visit 2的可能的结果可以是1或0。由于在该访问的值可以是1,则change应为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 

回答

1

您可以使用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))