如果这是数据
x = c(rep(328, 4), rep(349, 12))
您可以对其进行游程编码表示
r = rle(x)
然后创建等于每次运行长度的序列
s = lapply(r$lengths, seq_len)
最后将这些添加到原始数据中(减 1,因为在上一步中创建的序列从 1 开始)
unlist(Map("+", s, r$values - 1)
所以
> r = rle(x)
> unlist(Map("+", lapply(r$lengths, seq_len), r$values - 1))
[1] 328 329 330 331 349 350 351 352 353 354 355 356 357 358 359 360
(不过,@DWin 的使用seq
更干净)。x
如果还没有按顺序排列,那么对 first 的值进行排序是有意义的。
> (x = sample(x))
[1] 349 349 349 349 349 349 328 349 349 328 328 328 349 349 349 349
> o = order(x)
> r = rle(x[o])
> unlist(Map(seq, r$values, length=r$length))[order(o)]
[1] 349 350 351 352 353 354 328 355 356 329 330 331 357 358 359 360