R Заполнение всех наблюдений после первого появления этим наблюдением в продольных данных

#r #longitudinal

Вопрос:

У меня есть данные, которые расположены слева в этой таблице, но я хочу сгенерировать данные справа:

ID A —> ID A B
1 0 1 0 0
1 0 1 0 0
1 1 1 1 1
1 0 1 0 1
2 0 2 0 0
2 1 2 1 1
2 0 2 0 1
2 0 2 0 1
2 0 2 0 1

Я хочу сгенерировать столбец B, который равен 0 до первого появления 1 в столбце A, а затем заполнить текущие наблюдения 1 из этого первого наблюдения в A по идентификатору. Я даже не знаю, с чего начать. Если кто-нибудь может помочь, я был бы признателен

Ответ №1:

 library(tidyverse)
df <-
  structure(list(
    ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
    A = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L)
  ),
  class = "data.frame",
  row.names = c(NA,-9L))

df %>% 
  group_by(ID) %>% 
  mutate(B = cummax(A)) %>% 
  ungroup()
#> # A tibble: 9 x 3
#>      ID     A     B
#>   <int> <int> <int>
#> 1     1     0     0
#> 2     1     0     0
#> 3     1     1     1
#> 4     1     0     1
#> 5     2     0     0
#> 6     2     1     1
#> 7     2     0     1
#> 8     2     0     1
#> 9     2     0     1
 

Создано 2021-09-28 пакетом reprex (v2.0.1)

Комментарии:

1. Это сработало, спасибо!

2. Отлично! Если вы считаете, что этот ответ был полезен для вас, вы можете принять его, щелкнув галочку в левой части этого ответа 🙂

Ответ №2:

Может быть, мы сможем попробовать

 transform(
  df,
  B =  ave(A==1, ID, FUN = cumsum)
)