I want to split a vector to follow these three(3) conditions using R:
- Have an equal length of
l - Overlap with a constant value
ov - The first element and the last element alone of the parent vector should be for the last chunk (with just the two elements).
I got the below R code to meet the first two conditions as follows
ts = 1:10
l = 7
ov = l -1
library(tidyverse)
anil <- function(ts, l, ov){
seq_len((length(ts) - ov) %/% (l - ov) +1) %>%
as.data.frame() %>%
setNames('id') %>%
mutate(start = accumulate(id, ~ .x + l - ov),
end = pmin(start + l - 1, length(ts)),
start = pmin(start, end - l + 1)) %>%
filter(!duplicated(paste(start, end, sep = '-'))) %>%
transmute(desired = map2(start, end, ~ ts[.x:.y])) %>%
as.list
}
anil(ts, l, ov)
I got this result:
>$desired[[1]]
[1] 1 2 3 4 5 6 7
>$desired[[2]]
[1] 2 3 4 5 6 7 8
>$desired[[3]]
[1] 3 4 5 6 7 8 9
>$desired[[4]]
[1] 4 5 6 7 8 9 10
I need help to meet the `third condition.
I want my result to look like this:
>$desired[[1]]
[1] 1 2 3 4 5 6 7
>$desired[[2]]
[1] 2 3 4 5 6 7 8
>$desired[[3]]
[1] 3 4 5 6 7 8 9
>$desired[[4]]
[1] 4 5 6 7 8 9 10
>$desired[[5]]
[1] 1 10