2017-09-26 50 views

回答

5

的選擇是rle

inverse.rle(within.list(rle(x), values[values!=0] <- seq_along(values[values!=0]))) 
#[1] 0 0 1 1 0 0 2 2 0 0 3 3 3 3 0 4 0 5 0 6 

或者與rleiddata.table

library(data.table) 
x1 <- x*rleid(x) 
match(x1, unique(x1[x1!=0]), nomatch = 0) 
#[1] 0 0 1 1 0 0 2 2 0 0 3 3 3 3 0 4 0 5 0 6 
+1

第二個解決方案是很好的。沒想到用那樣的比賽。 –