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