R语言拆分向量为重叠子向量并追加首尾元素组成的最后分块
R向量拆分需求实现方案
修改后完整代码
ts = 1:10 l = 7 ov = l -1 library(tidyverse) anil <- function(ts, l, ov){ # 计算符合前两个条件的基础分块 base_blocks <- 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])) %>% pull(desired) # 追加首尾元素组成的最后一个分块 full_blocks <- c(base_blocks, list(c(ts[1], tail(ts, 1)))) # 保持原返回结构不变 return(list(desired = full_blocks)) } anil(ts, l, ov)
修改说明
- 保留原代码中满足「子向量长度固定为l」、「相邻子向量重叠长度固定为ov」的核心逻辑,仅调整最后输出部分
- 提取基础分块列表后,额外生成由父向量首元素和尾元素组成的分块,追加到分块列表的末尾
- 返回结构和原代码完全一致,不影响原有调用逻辑
内容的提问来源于stack exchange,提问作者Daniel James
相关产品推荐
相关产品推荐

