gpt4 book ai didi

R 将向量拆分为重叠的子向量并连接第一个和最后一个元素

转载 作者:行者123 更新时间:2023-12-02 18:31:29 30 4
gpt4 key购买 nike

我想使用 R 拆分一个向量来遵循这三 (3) 个条件:

  1. 具有等长的l
  2. 与常量值重叠 ov
  3. 父向量的第一个元素和最后一个元素应该是最后一个 block (只有两个元素)。

我得到下面的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

最佳答案

也许我们可以将下面的代码与 embed + asplit + range 一起使用

c(
asplit(embed(ts, l)[seq(1, length(ts) - l + 1, l - ov), l:1], 1),
list(range(ts))
)

给出

[[1]]
[1] 1 2 3 4 5 6 7

[[2]]
[1] 2 3 4 5 6 7 8

[[3]]
[1] 3 4 5 6 7 8 9

[[4]]
[1] 4 5 6 7 8 9 10

[[5]]
[1] 1 10

关于R 将向量拆分为重叠的子向量并连接第一个和最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69368047/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com