2017-08-13 45 views
0

設定環路行程最大「N」線

所以我目前發現的值低於< -1,將打印1,否則爲0環​​它將然後循環,直到找到另一個值> = 1.

value <- c(0.2,0.3,0.4,0.5,0.6,-2.0,0.7,0.4,-10,0.1,0.2,0.4,3.0,0.6,0.7,0.8,-1.2,0.6,0.7,0.8,0.3,0.5,2,0.1,0.2) 
df <- data.frame(signal =0,value) 

df$signal[[1]] = ifelse(df$value[[1]] < (-1), 1, 0) 

for (i in 2:nrow(df)){ 
    df$signal[i] = ifelse(df$value[i] < (-1), 1, 
         ifelse(df$value[i] >= 1, 0, 
           df$signal[i-1])) 
} 
df 

我打算做的是不是退出循環> 1,而是在固定數量的'n'行之後退出。 因此,如果我設置總循環行程從初始-1找到5行,它將在其行進的最大行數爲5後打印0。

如果我們遇到另一個信號1,忽略這一點,只是繼續5行旅行。

林沿設置一個計數器的線條思維:

counter <- 1 
repeat { 
    df$signal = ifelse(df$value < (-1), 1, 0) 
    counter <- counter+1 

    if(counter > 5) { 
    break 
    } 
} 

上述接縫合理但它不生產我的結果。

任何人有任何想法呢?

期望的輸出將是:

signal value 
1  0 0.2 
2  0 0.3 
3  0 0.4 
4  0 0.5 
5  0 0.6 
6  1 -2.0 
7  1 0.7 
8  1 0.4 
9  1 -10.0 
10  1 0.1 
11  0 0.2 
12  0 0.4 
13  0 3.0 
14  0 0.6 
15  0 0.7 
16  0 0.8 
17  1 -1.2 
18  1 0.6 
19  1 0.7 
20  1 0.8 
21  1 0.3 
22  0 0.5 
23  0 2.0 
24  0 0.1 
25  0 0.2 

上我們打印1和5行旅行...也第9行每< -1.0值通告,我們有一個重複< 1.0,而最多5 nlines條件沒有得到滿足,這忽略了在最大'n'行程範圍內的重複。

再行第17行,我們遇到了< -1.0,並打印1行5行的最大行程。

回答

1

這應該爲你工作:

value <-c(0.2,0.3,0.4,0.5,0.6,-2.0,0.7,0.4,-10,0.1,0.2,0.4,3.0,0.6,0.7,0.8,-1.2,0.6,0.7,0.8,0.3,0.5,2,0.1,0.2) 
res <- NULL 
while (length(res) < length(value)) { 
    if (value[length(res)+1] < -1) { 
     res <- c(res, rep(1,5)) 
    } else { 
     res <- c(res, 0) 
    } 
} 
res <- data.frame(signal = res, value = value) 
res 

不知道有櫃檯的解決方案。似乎很複雜。

編輯:您將轉換爲數據幀之前

res <- res[1:length(value)] 

:您可能需要做的。這可以確保您的信號列不會長於您的觀察/值列。

+0

奇妙 - 作品 - 非常感謝你! –