2017-02-14 71 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))