Идея через базу R,
v1 <- cumsum(df$breaks)
v2 <- c(1, v1+1)
paste(v2[-length(v2)], v1, sep = ':')
#[1] "1:7" "8:13" "14:18" "19:23"
Если вы хотите, чтобы они были действительными векторами, тогда мы можем использовать Map
.
Если предположить, что мы уже создали v1
и v2
, как показано выше, то
Map(`:`, v2[-length(v2)], v1)
#[[1]]
#[1] 1 2 3 4 5 6 7
#[[2]]
#[1] 8 9 10 11 12 13
#[[3]]
#[1] 14 15 16 17 18
#[[4]]
#[1] 19 20 21 22 23
Прикрепив его к вашему фрейму данных,
df$ranges <- Map(`:`, v2[-length(v2)], v1)
df
# A tibble: 4 x 3
# year_row breaks ranges
# <chr> <int> <list>
#1 2015 7 <int [7]>
#2 2016 6 <int [6]>
#3 2017 5 <int [5]>
#4 2018 5 <int [5]>