df <- data.frame(
grp = c("A", "B", "A", "C", "C", "A", "B", "A"),
dur = c(111,222,33,10,555,333,600,222)
)
library(dplyr, warn.conflicts = F)
df %>%
group_by(grp) %>%
mutate(starttime = lag(cumsum(dur), default = 0) + 1,
Endtime = cumsum(dur)
)
#> # A tibble: 8 x 4
#> # Groups: grp [3]
#> grp dur starttime Endtime
#> <chr> <dbl> <dbl> <dbl>
#> 1 A 111 1 111
#> 2 B 222 1 222
#> 3 A 33 112 144
#> 4 C 10 1 10
#> 5 C 555 11 565
#> 6 A 333 145 477
#> 7 B 600 223 822
#> 8 A 222 478 699
或者从0开始
df %>%
group_by(grp) %>%
mutate(starttime = lag(cumsum(dur), default = 0),
Endtime = cumsum(dur)
)
#> # A tibble: 8 x 4
#> # Groups: grp [3]
#> grp dur starttime Endtime
#> <chr> <dbl> <dbl> <dbl>
#> 1 A 111 0 111
#> 2 B 222 0 222
#> 3 A 33 111 144
#> 4 C 10 0 10
#> 5 C 555 10 565
#> 6 A 333 144 477
#> 7 B 600 222 822
#> 8 A 222 477 699
于2021-07-03由
reprex package
(2.0.0版)