R 在第一次出现后用纵向数据中的观察值填充所有观察值

R Filling all observations after first occurrence with that observation in longitudinal data

我在这个table的左边设置了数据,但我想在右边生成数据:

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 列,它在 A 列中第一次出现 1 之前一直为 0,然后用 ID 从 A 中的第一个观察结果中的 1 填充后续观察结果。我什至不知道从哪里开始。 如果有人可以提供帮助,我将不胜感激

也许我们可以试试

transform(
  df,
  B = +ave(A==1, ID, FUN = cumsum)
)
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

reprex package (v2.0.1)

于 2021-09-28 创建