Как создать переменную лечения из разницы между двумя наблюдениями? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть кадр данных, который выглядит следующим образом.

ID <- c(1,1,2,2,3,3,4,4)
PERIOD <- c(1,2,1,2,1,2,1,2)
STATUS <- c(1,0,1,1,0,0,0,1)
TREAT <- c(0,0,0,0,0,0,0,0)
EXAMPLE <- data.frame(ID, PERIOD, STATUS, TREAT)

Теперь я хочу, чтобы переменная TREAT принимала значение 1 для всех PERIOD = 2, где внутри идентификатора, STATUS = 1 в PERIOD = 1 и STATUS = 0 в PERIOD = 2.

В данных этого примера это будет иметь место только во второй строке.

Я предполагаю, что это будет каким-то образом использовать group_by (ID, PERIOD) и if_else (), но я не могу понять, как вернуться к значению в предыдущем наблюдении. Может кто-нибудь мне помочь? Спасибо!

1 Ответ

0 голосов
/ 15 апреля 2020

То, что вы хотите, это case_when () . Он очень полезен и прост в использовании, как только вы в него попадете. Я не совсем понял условия, которые вы хотели, но вот пример, который вы можете использовать, чтобы получить то, что вы хотите.

  EXAMPLE %>% 
  mutate(TREAT = case_when(
    STATUS == 1 & PERIOD == 2 ~ 1,
    STATUS == 0 & PERIOD == 1 ~ 2,
    STATUS == 0 & PERIOD == 2 ~ 3,
    STATUS == 1 & PERIOD == 1 ~ 4,
    T ~ 99 # This is for all cases that are not covered by your conditions
  ))

Редактировать: основываясь на вашем комментарии, я отредактировал свой ответ, используя first() и last() от dplyr. Вам это нужно?

EXAMPLE %>% 
  group_by(ID) %>% 
  mutate(TREAT = case_when(
    first(STATUS) == 1 & last(STATUS) == 0 ~ 1,
    T ~ 0))

Удачи!

...