Как разделить вектор на равную длину с добавлением слева от первого элемента (ов) родительского вектора с R - PullRequest
0 голосов
/ 05 октября 2019

Я хочу, чтобы R разделил вектор на подвектор равной длины, но если последний подвектор не равен длине других подвекторов, чтобы сложить его с первым элементом (ами) родительского вектора.

Я попробовал это из ответа на вопрос Здесь , что не то, что я хочу.

ts <- 1:11 
bs <- 3 
nb <- ceiling(length(ts) / bs)

split(ts, rep(1:nb, each=bs, length.out = length(ts)))

#$`1`
#[1] 1 2 3

#$`2`
#[1] 4 5 6

#$`3`
#[1] 7 8 9

#$`4`
#[1] 10 11

Что я хочу получить как вывод

#$`1`
#[1] 1 2 3

#$`2`
#[1] 4 5 6

#$`3`
#[1] 7 8 9

#$`4`
#[1] 10 11 1

1 Ответ

1 голос
/ 05 октября 2019
#Extend the `ts` to have a total length of `bs * nb`
split(rep(ts, length.out = nb * bs), rep(1:nb, each = bs))
#OR use modular arithmetic
split(ts[((sequence(nb * bs) - 1) %% length(ts)) + 1], rep(1:nb, each = bs))
#$`1`
#[1] 1 2 3

#$`2`
#[1] 4 5 6

#$`3`
#[1] 7 8 9

#$`4`
#[1] 10 11  1
...