2015-04-04 92 views
0

我有一個約爲1000年的PDSI值的矢量,範圍從6到-6。我想找到一個快速的方法來搜索何時有四個或更多連續的年份,即< = -2的值。此外,我需要將數據保存在與原始1000相同長度的矢量中,以便我可以將它們繪製在一起。最終產品甚至可能是一個邏輯向量。以下是我擁有的和我想要的一個例子。連續值低於閾值

Original <- c(1,6,5,-2,-6,-4,-2,0,1,-2,-3,0) 
New <- c(0,0,0,1,1,1,1,0,0,0,0,0) # expected output 
+1

退房像'RLE(PDSI < 2)' – 2015-04-04 23:26:32

+0

@BenBolker他希望'== -2',所以rle(PDSI == -2)'也許是 – 2015-04-05 00:09:52

+1

OP *本來希望'<( - 2)'(我誤讀,然後OP編輯) – 2015-04-05 02:50:20

回答

2

你可以嘗試以下

x <- c(rep(-2, 5), rep(0, 3), rep(-2, 4), rep(0,6), rep(5, 2), rep(-2, 6), rep(-6, 2)) 
    (r <- rle(x)) 
    ## Run Length Encoding 
    ## lengths: int [1:7] 5 3 4 6 2 6 2 
    ## values : num [1:7] -2 0 -2 0 5 -2 -6 
    (r$lengths[r$lengths > 3 & r$values== -2]) # length of each sequence 
    ## [1] 5 4 6 

要獲得只用的序列的載體 「-2」,你可以嘗試

r$values[r$values != -2] <- 0 
rep(r$values, r$lengths) 

## [1] -2 -2 -2 -2 -2 0 0 0 -2 -2 -2 -2 0 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 0 0 
+0

close,但是OP要'== -2',而不是'<-2' – 2015-04-05 00:09:00

+0

謝謝,這非常有用!然而,有沒有辦法使最終產品可能是一個邏輯向量,其長度與原始長度相同,但是隻有1個有四個(或者我們想要的任何長度)連續值<= - 2,剩下的是零?示例:原始< - 1,6,5,-2,-6,-4,-2,0,1,-2,-3,0新< - 0,0,0,1,1,1,1 ,0,0,0,0,0 – Pinus2Quercus 2015-04-05 00:52:14

+0

你應該編輯你的文章來澄清你確實想要什麼樣的例子和預期的結果。 – 2015-04-05 01:08:27

相關問題