2017-02-14 22 views
0

У меня есть df, который выглядит так, и мне нужно запустить код для создания change. change определяется как первый постоянный положительный outcome (outcome = 1).Использование переменной задержки, по группе

Логика заключается в следующем:

  • Каждый ID имеет 5 visits с величиной outcome на каждом visit
  • The change переменной может быть только 1 если результат 1 в visit х, а затем
  • Например, 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))