2017-06-12 54 views
-1

我有一個向量,在這個向量中我必須計算數據從0切換到100並返回到0的數量。下面給出了一個例子。計算向量中開關個數的計數

Input 
X1<-c(100,100,100,0,0,0,0,0,100,100,100,100,100,0,0,0,0,100,100,100,0,0,100,100) 

所以輸出應該是作爲值開始於0住在100的一段時間,回到0.我的要求就是指望有多少次這樣的切換已經發生。我知道這個問題,但這隻能給我一個長度。

在此先感謝您的幫助。

+1

或者因爲你提到RLE'地板(長度(RLE(X1)$長度)/ 2)' – G5W

+2

@Anish,如果預期的答案是** 2 **,因爲你不知道,如果最後運行'100'切換回'0'?也許你只是在尋找從'0'到'100'的開關? – CPak

+0

@ChiPak是的,我相信因爲我沒有控制最後甚至是第一個元素。 –

回答

2

這看起來足夠

sum(X1[-1] != X1[-length(X1)])/2 

假設是

  • 你只需要在X1
  • X1最後一個元素等於第一個元素兩個獨特的值,也就是說,它切換回到最初的狀態。
2

你可以做這樣的事情,

sum(diff(X1) == 100) 
#[1] 3 

#Or 

min(sum(diff(X1) == 100), sum(diff(X1) == -100)) 
#[1] 3 
1

您可以運行rle,然後通過在時間values三個要素遍歷,看是否需要的條件已經得到滿足。

with(rle(X1), 
    sum(sapply(3:length(lengths), function(i) 
     values[i-2] == 0 & values[i-1] == 100 & values[i] == 0))) 
#[1] 2