我需要创建一个从1到100(无关紧要)的序列,其交替步长不遵循任何特定的分布或规则.准确的步长只能由数字向量定义:
vec <- c(1,1,2,1,3,1,1,1,1,4,1)
我如何从上面的向量中得到下面的序列?
seq <- c(1,2,3,5,6,9,10,11,12,13,17,18)
来自seq
函数的参数by =
不接受向量作为输入,因此任何有关如何解决此问题的 idea 或建议都将受到高度赞赏.
我需要创建一个从1到100(无关紧要)的序列,其交替步长不遵循任何特定的分布或规则.准确的步长只能由数字向量定义:
vec <- c(1,1,2,1,3,1,1,1,1,4,1)
我如何从上面的向量中得到下面的序列?
seq <- c(1,2,3,5,6,9,10,11,12,13,17,18)
来自seq
函数的参数by =
不接受向量作为输入,因此任何有关如何解决此问题的 idea 或建议都将受到高度赞赏.
使用cumsum
:
cumsum(c(1, vec))
#[1] 1 2 3 5 6 9 10 11 12 13 17 18
一年前,我问了一个similar question分,一个非常灵活的solution分是:
seq2 <- function(from, to, by) {
vals <- c(0, cumsum(rep(by, abs(ceiling((to - from) / sum(by))))))
if(from > to) return((from - vals)[(from - vals) >= to])
else (from + vals)[(from + vals) <= to]
}
seq2(from = 1, to = sum(vec), by = vec)
#[1] 1 2 3 5 6 9 10 11 12 13 17