2016-02-08 25 views
2

我有多個具有類似重複遞增模式的數字向量。例如:在R中的數字向量中標識類似的重複遞增模式

vec_1 <- c(43, 17, 186, 193, 186, 186, 474, 491, 498, 498, 673, 736, 743, 716, 
      44, 19, 193, 194, 193, 193, 472, 498, 476, 499, 673, 743, 714, 714, 
      19, 21, 194, 180, 194, 194, 485, 499, 481, 476, 712, 719, 712, 
      17, 40, 174, 180, 169, 495, 485, 673, 177, 485, 481, 714, 730, 733, 
      40, 33, 190, 174, 180, 482, 495, 495, 479, 703, 733, 704) 

總是有5個重複。在上面的例子:

  1. 開始於43,具有716點
  2. 開始於44(其中1端部)結束時,用714
  3. 等結束

我要生成一個新標識重複編號的矢量。對於vec_1這將是:

rep_nums_1 <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, ..., 5) 

項的每個重複內的數目可不同(所以我不能只將第一個14個元件1,下一個14 2等)

不確定如何最好地解決這個問題。不完美的解決方案是檢查序列中的下一個元素是否小於當前值, 300並且如果是的話改變組號。有更好的建議嗎?謝謝。

+1

我可能是密集的,但您似乎掩飾了很多重要的信息,在步驟3 – MichaelChirico

+0

3是指重複數3(其中所有五個先從低數字並以高數字結束)。 – alexvpickering

回答

1

你可以去那裏上你的「模式」更多的闡述,但我認爲這不會把戲:

rep(1:5, diff(c(0, which(diff(vec_1) < -500), length(vec_1)))) 

應該有與rle的方法爲好。

0

另一個變化是

cumsum(c(TRUE,diff(vec_1) < -500))