Хотите создать столбец b
из a
так, чтобы
if a == 1 then b = 0
else b = counting start from 1
then if a == 1 then b = 0
else b = counting start from 1
, как указано в tb1
ниже.
Мой рабочий пример приведен ниже:
library(tidyverse)
tb1 <-
tibble(
a = c(1, rep(0, 4), 1, rep(0, 5), 1, 1, rep(0, 4), 1, rep(0, 2))
, b = c(0, 1:4, 0, 1:5, 0, 0, 1:4, 0, 1:2)
)
tb1
#> # A tibble: 20 x 2
#> a b
#> <dbl> <dbl>
#> 1 1 0
#> 2 0 1
#> 3 0 2
#> 4 0 3
#> 5 0 4
#> 6 1 0
#> 7 0 1
#> 8 0 2
#> 9 0 3
#> 10 0 4
#> 11 0 5
#> 12 1 0
#> 13 1 0
#> 14 0 1
#> 15 0 2
#> 16 0 3
#> 17 0 4
#> 18 1 0
#> 19 0 1
#> 20 0 2
tb2 <-
tb1 %>%
mutate(b1 = if_else(condition = a == 1, true = 0, false = 1)) %>%
group_by(a) %>%
mutate(b2 = cumsum(b1))
tb2
#> # A tibble: 20 x 4
#> # Groups: a [2]
#> a b b1 b2
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 0 0 0
#> 2 0 1 1 1
#> 3 0 2 1 2
#> 4 0 3 1 3
#> 5 0 4 1 4
#> 6 1 0 0 0
#> 7 0 1 1 5
#> 8 0 2 1 6
#> 9 0 3 1 7
#> 10 0 4 1 8
#> 11 0 5 1 9
#> 12 1 0 0 0
#> 13 1 0 0 0
#> 14 0 1 1 10
#> 15 0 2 1 11
#> 16 0 3 1 12
#> 17 0 4 1 13
#> 18 1 0 0 0
#> 19 0 1 1 14
#> 20 0 2 1 15