每次创建一个从 1 到 n 的数值向量,给定一个 ns 的向量

Create a numeric vector from 1 to n each time, given a vector of ns

从标题上看有点乱,但是结合下面的例子应该就很清楚了。

假设我有以下向量 a:

a=c(3,10,6,7)

我想要一个向量 b,这样它每次都涵盖从 1 到 a 中的每个数字,结果是:

b=c(1,2,3,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,1,2,3,4,5,6,7)

为了完成任务,如果 a 中的数字 ==1,我不想要单独的 1,而是 NA。在这种情况下,如果 a 是:

a=c(3,10,6,1,7)

b 应该是:

b=c(1,2,3,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,NA,1,2,3,4,5,6,7)

我应该如何使用基本工具轻松地做到这一点?谢谢!

是的,sequence(a) 应该比 unlist(lapply(a, seq_len)) 更受青睐。一旦你计算出长度为 1 的子序列从哪里开始,你就可以再分配 NA:

a <- c(3, 10, 6, 1, 7)
replace(sequence(a), cumsum(a)[a == 1], NA)
##  [1]  1  2  3  1  2  3  4  5  6  7
## [11]  8  9 10  1  2  3  4  5  6 NA
## [21]  1  2  3  4  5  6  7