R 创建新的重复索引,其中每个数字的范围尽可能有效地依赖于另一列的索引

R 创建新的重复索引,其中每个数字的范围尽可能有效地依赖于另一列的索引,r,vector,replicate,R,Vector,Replicate,我有一个数字向量 initialindex= c(17, 23, 28, 34, 39, 45) 我想从中得到的是: finalindex=c(1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5) 该数字根据初始索引的差异重复。23-17=6 1's和28-23=5'2s 我可以取初始索引的差值: diff(initialindex) 这将给出最终索引中每个值的长度(61,52,63)。但是,我需要用新的索引值1:l

我有一个数字向量

initialindex= c(17,  23,  28,  34,  39,  45)
我想从中得到的是:

finalindex=c(1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5)
该数字根据初始索引的差异重复。23-17=6 1's和28-23=5'2s

我可以取初始索引的差值:

diff(initialindex)
这将给出最终索引中每个值的长度(61,52,63)。但是,我需要用新的索引值1:len(initialindex)复制它们

有人能帮我吗

Tracy

一个选项可以是:

cumsum(sequence(diff(initialindex)) == 1)

 [1] 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5

使用
inverse.rle

x <- rle(0)
x$lengths <- diff(initialindex)
x$values <- seq_along(x$lengths)
inverse.rle(x)

[1] 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5

x使用
rep
的解决方案–最初由提出,但被删除

rep(x = 1:(length(initialindex) - 1L),
    times = diff(initialindex))
# [1] 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5