【发布时间】:2021-09-28 20:20:53
【问题描述】:
我想split 使用 R 来遵循这三 (3) 个条件的向量:
- 具有相等的长度
l - 与常数值重叠
ov - 父向量的第一个元素和最后一个元素应该是最后一个块(只有两个元素)。
我得到下面的R代码满足前两个条件如下
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)
我得到了这个结果:
>$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[[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
【问题讨论】: